def primeiroListaAdj(self, v): ''' Retorna a primeira aresta da lista adjunta de v ''' self.indice[v] = 0 if not self.isListAdjVazia(v): item = self.adj[v][self.indice[v]] if item != None: return Aresta(v, item.vertice, item.peso) return None return None
def proxAdj(self, v): ''' Retorna, se houver, a próxima aresta da lista adjunta de v ''' self.indice[v] += 1 if len(self.adj[v]) == self.indice[v]: return None item = self.adj[v][self.indice[v]] if item != None: return Aresta(v, item.vertice, item.peso) return None
def insereAresta(self, v1, v2, peso=0): ''' Insere a aresta (v1, v2) no grafo com o peso especificado ''' cell_to_add = Celula(v2, peso) self.adj[v1].append(cell_to_add) cell_to_add2 = Celula(v1, peso) self.adj[v2].append(cell_to_add2) for arestaI in self.arestas: if arestaI.v1 == v1 and arestaI.v2 == v2: return if arestaI.v2 == v1 and arestaI.v1 == v2: return self.arestas.append(Aresta(v1, v2, peso))
def retiraAresta(self, v1, v2): ''' Retorna a aresta v1 -> v2 se ela for removida com sucesso, retorna None se ela não existir. ''' for arestaI in self.arestas: if (arestaI.v1 == v1 and arestaI.v2 == v2) or (arestaI.v2 == v1 and arestaI.v1 == v2): self.arestas.remove(arestaI) break for item in self.adj[v1]: if item.vertice == v2: self.adj[v1].remove(item) for item2 in self.adj[v2]: if item2.vertice == v1: self.adj[v2].remove(item2) return Aresta(v1, v2, item2.peso) return None