Python Programme

français
Tags: #<Tag:0x00007f5cf067dc80>

#1

Hello,

J’ai fait un programme avec mon professeur ci-dessous

villes = [(“Strasbourg”, “Dijon”, 330), (“Strasbourg”, “Paris”, 490),
(“Lille”, “Paris”, 225), (“Lille”, “Rouen”, 256),
(“Dijon”, “Lyon”, 195), (“Dijon”, “Orléans”, 315),
(‘Lyon’, ‘Limoges’, 410),
(“Marseille”, “Lyon”, 314), (“Marseille”, “Toulouse”, 403),
(“Toulouse”, “Lyon”, 538), (“Toulouse”, “Bordeaux”, 245), (‘Toulouse’, ‘Limoges’, 290),
(“Paris”, “Rouen”, 136), (“Paris”, “Orléans”, 134), (“Paris”, “Rennes”, 135),
(“Nantes”, “Orléans”, 334),(“Nantes”, “Rennes”, 113),(“Nantes”, “Limoges”, 323), (“Nantes”, “Bordeaux”, 351),
(“Bordeaux”, “Limoges”, 221),
(“Rouen”, “Rennes”, 312),
(“Orléans”, “Limoges”, 269), (‘Orléans’, ‘Rennes’, 355)]

def main(pile, distance, trajets, ville_arrivee, meilleure_distance, trajet_final):
# pile : liste qui sert à ne pas passer deux fois par la même ville
# distance : augmente au fil des récursions mais garde en mémoire les distances précédentes pour pouvoir tester tous les chemins sans problème
# trajets : liste de toutes les routes possibles
# meilleure_distance : sauvegarde de la plus courte distance pour tester en fin de parcours
# trajet_final : sauvegarde du trajet final correspondant à la plus courte distance
test = False # test voisin possible
for villes in trajets:
ville_test = pile[-1] # Récupération de la ville dans laquelle on est actuellement
if (villes[0] == ville_test and villes[1] == ville_arrivee) or (villes[1] == ville_test and villes[0] == ville_arrivee): # test fin de trajet
return distance + villes[2], pile + [ville_arrivee] # retour distance totale + trajet
if villes[0] == ville_test and villes[1] not in pile: # test ville pas encore parcourue et autre ville = ville actuelle
test = True
distance_totale, trajet_test = main(pile + [villes[1]], distance + villes[2], trajets, ville_arrivee, meilleure_distance, trajet_final)
if distance_totale < meilleure_distance:
meilleure_distance = distance_totale
trajet_final = trajet_test
# récupération de la distance parcourue et du trajet effectué, et comparaison avec la meilleure distance
elif villes[1] == ville_test and villes[0] not in pile:
test = True
distance_totale, trajet_test = main(pile + [villes[0]], distance + villes[2], trajets, ville_arrivee, meilleure_distance, trajet_final)
if distance_totale < meilleure_distance:
meilleure_distance = distance_totale
trajet_final = trajet_test
# idem avec les villes opposées dans le triplet
if test == False:
return 99999999, []
else:
return meilleure_distance, trajet_final

Voici mon programme, c’est l’algorithme de Dijkstra qui sert simplement a trouver le plus court chemin. J’ai réussit à faire mon algorithme mais je dois maintenant faire afficher mon résultat avec un print du coup donc afficher la ville de départ, afficher les villes intermédiaires du trajet validé et la ville d’arrivée dans mon print. Et je n’arrive vraiment pas a le faire je me demandais du coup si quelqu’un pourrais m’aider. C’est quelque chose que je veux faire en plus de mon programme qui est réalisé, cela ne m’est pas demander directement mais j’aimerais le faire pour moi sauf que je ne sais pas comment l’écrire dans mon programme et ce qu’il faut prendre :slight_smile:

Cordialement et merci d’avance pour la réponse :smile:


#2

hey @solenebfg

content que tu ai trouvé toi même la solution à ton petit problème!

maintenant, il serait bien d’en faire profiter les autres :wink: comment as tu fais?