-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDijkstra FIFO.py
72 lines (51 loc) · 1.82 KB
/
Dijkstra FIFO.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
### Application de l'algorithme de Dijkstra sur les fonctions
import file_prioritaire as fp
def creerLiens(lig, col) :
l = []
n = lig*col
for i in range(n) :
l.append([])
if (i-1)//lig == i//lig :
l[-1].append(i-1)
if (i+1)//lig == i//lig :
l[-1].append(i+1)
if i-col >= 0 :
l[-1].append(i-col)
if i+col < n :
l[-1].append(i+col)
return l
def creerFonctions(voisins) :
n = len(voisins)
tab = [ [(lambda t : float('inf')) for i in range(n)] for j in range(n)]
for i in range(n) :
tab[i][i] = lambda t : 0
for j in range(len(voisins[i])) :
b = voisins[i][j]
tab[i][b] = (lambda t : i*t + b)
return tab
def voisins(graphe, i) :
return graphe[1][i]
lig, col = 6, 8
vsns = creerLiens(lig, col)
graphe = ([i for i in range(lig*col)], vsns, creerFonctions(vsns))
print(graphe[1])
def pcc(graphe) :
n = len(graphe[0])
date_arrivee = graphe[2]
tab = [ [[int(-1), float('inf')] for i in range(n)] for j in range(n) ]
for src in range(n) :
Q = fp.file_prioritaire(lambda a, b : a[1] <= b[0], [-1, float('inf')])
Q.enfile([src, 0])
tab[src][src] = [src, 0]
F = []
while not Q.est_vide() :
(i, t) = Q.defile()
i = int(i)
F.append(i)
for j in voisins(graphe, i) :
ta = date_arrivee[i][j](tab[src][i][1])
if ta < tab[src][j][1] :
tab[src][j] = [i, ta]
Q.enfile([j, ta])
return tab
print(pcc(graphe))