예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
    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))
예제 #4
0
    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