def main(): # instancia Grafo em grf grf = Grafo() print ''' ----------------------------------------------------------- Demonstracão da biblioteca Grafo Professor: Alexandre Rademaker Aluno: Pablo Cerdeira ----------------------------------------------------------- ''' print ''' ----------------------------------------------------------- Setando o atributo grafo do objeto grf para um grafo ----------------------------------------------------------- ''' grf.grafo = {0: {16: 4, 11: 2}, 1: {3: 2}, 2: {18: 3}, 3: {8: 3, 7: 3}, 4: {19: 3}, 5: {15: 3}, 6: {14: 1}, 7: {2: 5, 11: 3}, 8: {1: 5}, 9: {15: 1}, 10: {16: 4, 3: 5}, 11: {5: 3}, 12: {6: 5}, 13: {17: 2}, 14: {0: 5, 2: 3}, 15: {19: 1}, 16: {17: 2, 4: 1}, 17: {0: 1}, 18: {16: 1, 12: 3}, 19: {13: 2}, 20: {9: 5, 15: 1}} grafo = grf.grafo print ''' ----------------------------------------------------------- Imprime o grafo: ----------------------------------------------------------- ''' print grafo print ''' ----------------------------------------------------------- Demonstrando a criacão de grafos randômicos ----------------------------------------------------------- ''' nNos = 100 # nNos: número de nós no grafo minArestas = 1 # minArestas: mínimo de arestas para cada nó maxArestas = 5 # maxArestas: máximo de arestas para cada nó maxPeso = 5 # maxPeso: peso máximo de cada aresta grafo = grf.random(nNos,minArestas,maxArestas,maxPeso) print ''' ----------------------------------------------------------- Imprime o grafo randômico ----------------------------------------------------------- ''' print grafo print ''' ----------------------------------------------------------- Converte grf.grafo para matriz de adjacências ----------------------------------------------------------- ''' print grf.converter("matriz") print ''' ----------------------------------------------------------- Converte grf.grafo para dicionário de tuplas ----------------------------------------------------------- ''' print grf.converter("tuplas") print ''' ----------------------------------------------------------- Plota grf.grafo usando o Ubigraph ----------------------------------------------------------- ''' print "Output: ", grf.plota("ubigraph") print ''' ----------------------------------------------------------- Plota grf.grafo usando o Graph-Tools e salva em PDF ----------------------------------------------------------- ''' print "Output: ", grf.plota("graph-tools",arquivo="grafoGraph-Tools.pdf") # pode-se utilizar as extensões png, pdf etc print ''' ----------------------------------------------------------- Plota grf.grafo usando o NetworkX e salva em PDF ----------------------------------------------------------- ''' print "Output: ", grf.plota("networkx",arquivo="grafoNetworkX.pdf") # pode-se utilizar as extensões png, pdf etc print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: BFS - Breadth First Search Nó Origem: 1 Nó Destino: 4 ----------------------------------------------------------- ''' print grf.bfs(inicio=1,fim=4) print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: BFS - Breadth First Search Nó Origem: 1 Nó Destino: Até onde for possível ----------------------------------------------------------- ''' print grf.bfs(inicio=1,fim=-1) print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: DFS - Deep First Search Nó Origem: 1 Nó Destino: 4 ----------------------------------------------------------- ''' print grf.dfs(inicio=1,fim=4) print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: DFS - Deep First Search Nó Origem: 1 Nó Destino: Até onde for possível ----------------------------------------------------------- ''' print grf.dfs(inicio=1,fim=-1) print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: RDFS - Recursive Deep First Search Nó Origem: 1 Nó Destino: 4 ATENCÃO: Ainda está bugado ----------------------------------------------------------- ''' print grf.r_dfs(inicio=1,fim=4) print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: RDFS - Recursive Deep First Search Nó Origem: 1 Nó Destino: Até onde for possível ----------------------------------------------------------- ''' print grf.r_dfs(inicio=1,fim=-1) print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: Tree DFS - Gera Tree com o Deep First Search Nó Origem: 1 Nó Destino: Até onde for possível ----------------------------------------------------------- ''' print grf.tree_bfs(inicio=1,fim=-1) print "Output: ", grf.plota_tree("graph-tools",arquivo="treeGraph-Tools.pdf") print "Output: ", grf.plota_tree("networkx",arquivo="treeTreeNetworkX.pdf") print "Output: ", grf.plota_tree("ubigraph") print ''' ----------------------------------------------------------- Algoritmos de navegacão em grafos: Tree DFS - Gera Tree com o Deep First Search Nó Origem: 1 Nó Destino: 4 ----------------------------------------------------------- ''' print grf.tree_bfs(inicio=1,fim=4) print "Output: ", grf.plota_tree("graph-tools",arquivo="treeGraph-Tools2.pdf") print "Output: ", grf.plota_tree("networkx",arquivo="treeTreeNetworkX2.pdf") print "Output: ", grf.plota_tree("ubigraph")
def main(): # instancia Grafo em grf grf = Grafo() print ''' ----------------------------------------------------------- Criacão de grafos randômicos ----------------------------------------------------------- ''' nNos = 100 # nNos: número de nós no grafo minArestas = 1 # minArestas: mínimo de arestas para cada nó maxArestas = 5 # maxArestas: máximo de arestas para cada nó maxPeso = 5 # maxPeso: peso máximo de cada aresta grafo = grf.random(nNos,minArestas,maxArestas,maxPeso) print ''' ----------------------------------------------------------- Imprime o grafo randômico ----------------------------------------------------------- ''' print grafo print ''' ----------------------------------------------------------- A funcão grf.nos() retorna um set com todos os nós do grafo. ----------------------------------------------------------- ''' print "Conjunto de nós: %s" % str(grf.nos()) print ''' ----------------------------------------------------------- É possível fazer looping com os dados do grafo. Demonstrando looping para imprimir nós e arestas. ----------------------------------------------------------- ''' for noOrigem in grf.grafo: for noDestino in grf.grafo[noOrigem]: print "Nó Origem: %s - Nó Destino: %s - Peso da Aresta: %s" % (str(noOrigem), str(noDestino), str(grf.grafo[noOrigem][noDestino])) print ''' ----------------------------------------------------------- Também é possível acessar um nó diretamente, pegando seus destinos, bem como o peso de cada destino. ----------------------------------------------------------- ''' print "Destinos e pesos do nó 5: %s" % str(grf.grafo[5]) print "" print "Destinos e pesos a partir do nó 5: " for noDestino in grf.grafo[5]: print "Destino: %s - Peso: %s" % (str(noDestino), str(grf.grafo[5][noDestino])) print ''' ----------------------------------------------------------- Podemos setar propriedades para os nós. Setando propriedade label e tamanho. Outras propriedades podem ser adicionadas livremente com os seguintes parâmetros: grf.adProp(<no>, <propriedade>, <valor>) ----------------------------------------------------------- ''' grf.adProp(5,"label","Texto do 5") grf.adProp(5,"tamanho", 6) grf.adProp(10,"label","Texto do 10") grf.adProp(10,"tamanho",8) print "Label do nó 5: %s" % str(grf.props[5]["label"]) print "Tamanho do nó 5: %s" % str(grf.props[5]["tamanho"]) print "Label do nó 10: %s" % str(grf.props[10]["label"]) print "Tamanho do nó 10: %s" % str(grf.props[10]["tamanho"]) print ''' ----------------------------------------------------------- Exemplo de adicão de propriedade label e cor para todos os nós Para este exemplo utilizaremos a funcão gfr.nos() pois só precisamos dos nós, e não das arestas. Imprimimos o label e a cor dos nós 2 e 7. ----------------------------------------------------------- ''' i = 1 for no in grf.nos(): grf.adProp(no,"label","Bola " + str(no)) if i > 0: grf.adProp(no,"cor","azul") else: grf.adProp(no,"cor","vermelho") i = i * (-1) print grf.props[2]["label"], " - cor: ", grf.props[2]["cor"] print grf.props[7]["label"], " - cor: ", grf.props[7]["cor"] print ''' ----------------------------------------------------------- Podemos refazer o looping que imprime todos os dados do grafo mas agora exibindo os labels e as cores dos nós ----------------------------------------------------------- ''' for noOrigem in grf.grafo: for noDestino in grf.grafo[noOrigem]: print "Nó Origem: %s (%s) - Nó Destino: %s (%s) - Peso da Aresta: %s" % (grf.props[noOrigem]["label"], grf.props[noOrigem]["cor"], grf.props[noDestino]["label"], grf.props[noDestino]["cor"], grf.grafo[noOrigem][noDestino])