Beispiel #1
0
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])