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:
- a origem não for um dos vértices do grafo imprima
Origem nao existe(sem acento) - o destino não for uma dos vértices do grafo imprima
Destino nao existe - se não houver caminho possível entre a origem e o destino imprima
Nao existe caminho - se houver caminho, imprima o tempo de transito em minutos (sem casas decimais), e na próxima linha a sequencia de vértices, da origem ate o destino separados por um branco.
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.