Itinéraire les plus court

Fermé
gab - 13 mars 2023 à 20:38
 PierrotLeFou - 14 mars 2023 à 01:45

Bonjour, je suis actuellement en première et je fait la spé nsi. Nous sommes en plein projet de fin d’année, et mon projet est le suivant : créer un programme qui trouve l’itinéraire le plus court entre 2 points donnés par l’utilisateur. Pour cela, pour faire rapide, nous utilisons l’algorithme de dijkstra(ou chaque intersections de rue est un sommet), or pour utiliser cet algo il faut pouvoir savoir quel sommet a accès à quel sommet (un graph quoi). Cependant quand l’utilisateur rentre les coordonnées du point de départ ou d’arrivé on ne sait pas à quel sommet il a accès. Au début nous avons fait une fonction qui part du principe que le sommet le plus proche est atteignable cependant ce n’est pas toujours le cas (rues parallèles proches par exemple). Nous avons beaucoup réfléchis mais sans résultat alors j’aimerai savoir si vous aviez des idées. Cdt Gabriel

1 réponse

PierrotLeFou
14 mars 2023 à 01:45

Devrais-je mentionner que tu as posté le même sujet sur un autre site? Je suggère un dictionnaire de dictionnaires.
Chaque fois que tu as une paire de sommets et la distance entre les deux, tu entres dans le sous-dictionnaire de chacun les coordonnées de l'autre.
Les clés du dictionnaire principal sont les sommets. Les valeurs du dictionnaire principal sont le sous-dictionnaire des sommets adjacents.
Les clés de chaque sous-dictionnaire sont les noeuds adjacents. Les valeurs pour chacun sont la distance entre ces sommets et la distance en partant du début sous forme de liste.
On place au départ comme distance au début pour tout le monde la valeur  float('inf')  qui représente l'infini.
Noter qu'on peut comparer cette valeur à toute valeur finie.
C'est un algo récursif qui essaie tous les parcours du sommet courant vers la sortie.
On retourne à chaque étape la valeur de la plus courte distance. On retourne en même temps à l'appelant le sous-chemin optimal en incluant le sommet courant.
Ça pourrait avoir l'air de ceci:
graphe = {'a': {'b': [5, float('inf')], 'c': [7, float('inf')], ... }, 'b': {...}, ... }

0