# Exemplo de utilização da biblioteca Networkx para grafos
## Autor: Hemerson Pistori (pistori@ucdb.br)
Neste exemplo eu calculo e mostro um caminho de custo mínimo ligando dois vértices. Aqui tem um vídeo meu explicando o algoritmo de Dijkstra: ["Caminho de Custo Mínimo usando Djikstra"](https://youtu.be/njhbUoXhvac)
"""
# Importa uma biblioteca para trabalhar com grafos
# Coloca os vértices e arestas no grafo usando as listas
G.add_nodes_from(vertices)
G.add_edges_from(arestas)
# Descobre o caminho de custo mínimo (ccm) do vértice 'a' até 'e'
ccm=nx.dijkstra_path(G,source='a',target='e')
# Mostra a sequência de vértices do caminho mínimo
print('Caminho de custo mínimo: ',ccm)
# Mostra qual o tamanho do caminho (note que usei outra forma mais simples de passar os parâmetros)
print('Tamanho do caminho de custo mínimo: ',nx.dijkstra_path_length(G,'a','e'))
# Importante: no exercício da disciplina os alunos precisam IMPLEMENTAR o
# algoritmo de Dijkstra e não apenas usar uma função pronta para ganhar
# todos os PIC$
"""# Visualizando o grafo e o menor caminho
Existem várias formas de visualização e abaixo eu mostra uma delas (tem que mergulhar na documentação da biblioteca e em outros exemplos da internet para encontrar outras). Aprendi esta forma vendo este exemplo aqui, mas mudei algumas pequenas coisas: ['NetworkXBasics'](http://avinashu.com/tutorial/pythontutorialnew/NetworkXBasics.html)
"""
# Importa uma biblioteca para gerar figuras e gráficos
importmatplotlib.pyplotasplt
# Guarda os pesos de cada aresta em um dicionário
pesos=nx.get_edge_attributes(G,'weight')
# Separa as arestas que fazem parte do menor caminho e guarda em arestas_vermelhas
arestas_vermelhas=list(zip(ccm,ccm[1:]))
# Marca os vértices que estão no CCM para serem pintados de azul e os outros de branco