mirror of
https://github.com/Fare-spec/cours.git
synced 2025-12-07 10:50:36 +00:00
tried to add dijkstra implementation
This commit is contained in:
74
Dijkstra/algo.py
Normal file
74
Dijkstra/algo.py
Normal 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'))
|
||||
84
README.md
84
README.md
@@ -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>
|
||||
|
||||
0
tp6_enirely/tp_listes_chaines/fichiers/factorial.py
Normal file
0
tp6_enirely/tp_listes_chaines/fichiers/factorial.py
Normal file
Reference in New Issue
Block a user