37 KiB
Executable File
37 KiB
Executable File
In [ ]:
#création du dictionnaire du graphe pondéré pour la recherche du plus court chemin
graph = {
'sommet': {'s_voisin1': distance, 's_voisin2': distance},
}In [ ]:
def initialisation(s_debut):
"""
initialisation des variables permettant de parcourir le graphe
Parameters
----------
depart : string
sommet de depart pour le parcours du graphe.
Returns
-------
E_calcul : dict
chemin en cours de calcul: poids et sommet précédent
E_calcul = {s_debut:[poids,prédécesseur]}
la distance au sommet de depart est nulle
E_sommets : dict
on met dans le dictionnaire provisoire les sommets adjacents
et leur poids par rapport au point de départ
E_sommets = {s_voisin1: [poids,depart],...}
"""
assert type(s_debut) ... , " s_debut doit être un caractère "In [ ]:
def Maj_poids(s_voisin,s_mini,poids, E_sommets):
"""
Mise à jour du poids et du prédécesseur:
si le sommet est nouveau : mettre à jour poids et prédecesseur
si le sommet est déjà découvert: mettre à jour uniquement le poids
Parameters
----------
s_voisin : str
sommet voisin
s_mini : str
sommet de poids mini
poids : int
poids du chemin le plus court
E_sommets : dict
dictionnaire des chemins en cours d'exploration'
Returns
-------
E_sommets : dict
dictionnaire des chemins en cours d'exploration mise à jour
avec le poids et le sommet de poids mini
"""
In [ ]:
def Dijkstra(graphe, s_debut):
"""
Cette fonction implémente l'algorithme de dijkstra
Parameters
----------
graphe : dict
DESCRIPTION. description du graphe
s_debut : str
DESCRIPTION. le sommet de départ
Returns
-------
calcul: dict
le résultat de l'algorithme de dijkstra
"""
assert type(s_debut) == str, " s_debut doit être un caractère "
assert type(graphe) == dict, "graphe doit être un dictionnaire"
#phase d'initialisation des données
E_calcul,E_sommets=initialisation(s_debut)
#tant que provisoire non vide
while E_sommets!= {}:
#recherche de la distance la plus faible
s_mini=min(E_sommets, key=E_sommets.get)
#---------------------Partie à compléter
#-------------------------------------
#fin while
return E_calcul In [ ]:
def routage(calcul,depart,arrivee):
"""
Cette fonction donne le routage d'un sommet A au sommet B à partir
du résultat obtenu par l'algorithme de dijkstra
Parameters
----------
calcul : dict
résultat de l'algo de dijkstra
depart : str
sommet de départ
arrivee : string
sommet d'arrivée
Returns
-------
routage : list
le routage de A à B
distance : int
la distance
"""
routage = [arrivee]
distance=calcul[arrivee][0]
#création de la liste de routage
while routage[0]!= depart:
for key in calcul:
if key==routage[0]:
routage.insert(0,calcul[routage[0]][1])
return routage,distanceIn [ ]:
resultat = Dijkstra(graph,"A")
routage, distance= routage(resultat,"A","G")
print("le plus court chemin est: ", routage)
print("la distance parcourue : ", distance)