Data de entrega: 14/12 ate 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
Se:
Nao existe caminho
Por exemplo:
3.4
a b d f g
18
a b d e g z
Que indica que o caminho mais curto tem 3.4 kilometros, e que o caminho mais rápido tera o tempo de transito de 18 minutos
Seu programa será executado como
python3 proj.py < dados.txt
Ou seja, seu programa 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.
o programa nao pode usar modulos que nao estão na biblioteca padrão.