tried to add dijkstra implementation

This commit is contained in:
2025-02-09 12:59:17 +01:00
parent 55cfb57800
commit d4645ec647
43 changed files with 116 additions and 42 deletions

74
Dijkstra/algo.py Normal file
View File

@@ -0,0 +1,74 @@
# https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
graph = {
'A': [('B', 4), ('C', 2)],
'B': [('C', 5), ('D', 10)],
'C': [('D', 3), ('E', 8)],
'D': [('E', 4), ('F', 11)],
'E': [('G', 6)],
'F': [('G', 2)],
'G': []
}
p = {}
def chemin(predecesseur, debut, fin):
chemin = []
courant = fin
while courant != debut:
chemin.insert(0, courant)
courant = predecesseur.get(courant)
if courant is None:
return None
chemin.insert(0, debut)
return chemin
def initialisation(G, debut):
distances = {key: float('inf') for key in G}
distances[debut] = 0
return distances
def trouve_min(Q, distances):
mini = float('inf')
sommet = None
for s in Q:
if distances[s] < mini:
mini = distances[s]
sommet = s
return sommet
def poid(s1, s2):
for voisin, poids in graph[s1]:
if voisin == s2:
return poids
return float('inf')
def distances_update(s1, s2, distances, predecesseur):
poids = poid(s1, s2)
if distances[s2] > distances[s1] + poids:
distances[s2] = distances[s1] + poids
predecesseur[s2] = s1
def dijkstra(G, debut='A'):
distances = initialisation(G, debut)
predecesseur = {}
Q = set(G.keys())
while Q:
s1 = trouve_min(Q, distances)
if s1 is None:
break
Q.remove(s1)
for voisin, _ in G[s1]:
if voisin in Q:
distances_update(s1, voisin, distances, predecesseur)
return distances, predecesseur
if __name__ == "__main__":
distances, predecesseur = dijkstra(graph, 'A')
print("Distances depuis A :", distances)
print("Chemin le plus court de A à G :", chemin(predecesseur, 'A', 'G'))

View File

@@ -109,7 +109,6 @@
│   ├── constantes.py
│   └── raquette.py
├── readme_creator.txt
├── README.html
├── README.md
├── recursivite
│   ├── exercice_MJoannic
@@ -145,50 +144,51 @@
│   ├── exercice4.py
│   ├── exercice5.py
│   └── exercice6.py
── tp6
│   ├── LSC.py
│   ├── npi.py
│   ├── Pile_List.py
│   ├── Pile_LSC.py
│   ├── Pile_Tuple.py
│   ├── README.md
│   ├── test.py
│   └── TP_Piles.pdf
├── TP6
│   ├── LSC.py
│   ├── Pile_List.py
│   ├── Pile_LSC.py
│   ├── Pile_Tuple.py
│   ├── test_2.py
│   │   ├── modules.rst
│   │   ├── Pile_List.rst
│   │   ├── Pile_Tuple.rst
│   │   └── test.rst
│   ├── test.py
│   ├── test.py.patch
│   └── TP_Piles.pdf
├── tp6_self
│   ├── LSC.py
│   ├── npi.py
│   ├── Pile_List.py
│   ├── Pile_LSC.py
│   ├── Pile_Tuple.py
│   ├── README.md
│   └── test.py
└── tp_listes_chaines
├── execute.py
├── fichiers
│   ├── Chartreuse.csv
│   ├── factorial.py
── tp6_enirely
├── tp6
│   ├── LSC.py
│   ├── Sommets.py
│   ├── npi.py
│   ├── Pile_List.py
│   ├── Pile_LSC.py
│   ├── Pile_Tuple.py
│   ├── README.md
│   ├── test.py
│   ── TP5_1.py
│   └── TP5.py
├── TP 5 Listes Chaînées-20240925.zip
└── TP5_Listes_Chainees.pdf
│   ── TP_Piles.pdf
── TP6
│   ├── LSC.py
│   ├── Pile_List.py
│   ├── Pile_LSC.py
│   ├── Pile_Tuple.py
│   ├── test_2.py
│   │   ├── modules.rst
│   │   ├── Pile_List.rst
│   │   ├── Pile_Tuple.rst
│   │   └── test.rst
│   ├── test.py
│   ├── test.py.patch
│   └── TP_Piles.pdf
├── tp6_self
│   ├── LSC.py
│   ├── npi.py
│   ├── Pile_List.py
│   ├── Pile_LSC.py
│   ├── Pile_Tuple.py
│   ├── README.md
│   └── test.py
└── tp_listes_chaines
├── execute.py
├── fichiers
│   ├── Chartreuse.csv
│   ├── factorial.py
│   ├── LSC.py
│   ├── Sommets.py
│   ├── test.py
│   ├── TP5_1.py
│   └── TP5.py
├── TP 5 Listes Chaînées-20240925.zip
└── TP5_Listes_Chainees.pdf
45 directories, 136 files
46 directories, 135 files
</pre>
</body>
</html>