Projeto de Python - Dijkstra

Data de entrega: 26/6 ate as 23:59

Escreva um programa em Python que vai calcular o caminho mais rápido entre uma origem em um destino dado. O programa recebe um grafo direcionado e informação sobre a distancia e velocidade máxima na aresta, e recebe também informação sobre a velocidade real na áreas e deve calcular o cominho mais rápido (assumindo que o motorista andará na maior velocidade permitida em cada aresta) entre uma origem e um destino dados.

Os dados tem a seguinte forma:

25.0
a b 0.4
a c 0.5 50.0
b d 1.2
b z 0.2 
z f 0.3 40.0

a b 12.5
a c 4.1
b z 0
a
z

A primeira linha indica a velocidade máxima default nas ruas da cidade, neste case, se não ha indicação de velocidade máxima na rua, assume-se que seja 25k/h

As linhas seguintes são as arestas direcionadas que possuem 3 ou quatro valores. Os dois primeiros são os vértices. O terceiro valor é a distancia em quilômetros entre os vértices. Se houver um quarto valor ele é a velocidade máxima naquele trecho e naquele sentido. O fato da velocidade máxima entre a e c ser 50k/h não significa que ele seja a velocidade no sentido de c para a. Na verdade pode não haver uma aresta de c para a (ou seja esse trecho da rua é mão única).

Ao final do grafo haverá uma linha sem dados. A partir deste ponto os dados indicam as velocidades atuais nas arestas. Neste momento a velocidade possível de a para b é só 12.5 k/h. Note que nem todas as arestas terão uma linha de atualização da sua velocidade real. Note também que algumas ruas podem ter velocidade máxima de 0k/h ou seja a rua esta fechada e aquela aresta temporariamente não existe.

Finalmente haverá duas linhas com a origem (a) e o destino (z).

Calcule o caminho mais rápido entre a origem e o destino.

Se:

Por exemplo:

18
a b d e g z

indica que o tempo de transito será de 18 minutos (truncado!!) e que o caminho mais rápido é de a para b para d … até z

Seu programa será executado no Susy como

python3 prog3.py < arq1.in

Ou seja, você precisa chamar o programa de prog3.py e precisa ter as linhas no final:

if __name__ == "__main__":
     funcprincipa()

que indica que o Python executará funcprincipal (use o nome que vc quiser) como a primeira chamada do programa.