Skip to content

Commit c242af4

Browse files
committed
Update dijkstra_2.py
1 parent 7830e62 commit c242af4

1 file changed

Lines changed: 95 additions & 96 deletions

File tree

graphs/dijkstra_2.py

Lines changed: 95 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,113 +1,112 @@
11
def print_dist(dist, v):
2-
"""
3-
Print vertex distances.
4-
>>> print_dist([0.0, 5.0, 8.0, 9.0], 4)
5-
Vertex Distance
6-
0 0
7-
1 5
8-
2 8
9-
3 9
10-
>>> print_dist([0.0, float('inf')], 2)
11-
Vertex Distance
12-
0 0
13-
1 INF
14-
>>> print_dist([0.0], 1)
15-
Vertex Distance
16-
0 0
17-
"""
18-
print("Vertex Distance")
19-
for i in range(v):
20-
if dist[i] != float("inf"):
21-
print(i, "\t", int(dist[i]), end="\t")
22-
else:
23-
print(i, "\t", "INF", end="\t")
24-
print()
2+
"""
3+
Print vertex distances.
4+
>>> print_dist([0.0, 5.0, 8.0, 9.0], 4)
5+
Vertex Distance
6+
0 0
7+
1 5
8+
2 8
9+
3 9
10+
>>> print_dist([0.0, float('inf')], 2)
11+
Vertex Distance
12+
0 0
13+
1 INF
14+
>>> print_dist([0.0], 1)
15+
Vertex Distance
16+
0 0
17+
"""
18+
print("Vertex Distance")
19+
for i in range(v):
20+
if dist[i] != float("inf"):
21+
print(i," ", int(dist[i]))
22+
else:
23+
print(i," ", "INF")
2524

2625

2726
def min_dist(mdist, vset, v):
28-
"""
29-
Finds the vertex with minimum distance that hasn't been visited yet.
30-
>>> min_dist([0, 4, 2, float('inf')], [True, False, False, False], 4)
31-
2
32-
>>> min_dist([0, 4, 2, 1], [True, False, True, False], 4)
33-
3
34-
>>> min_dist([0, 4, 2, 1], [True, True, True, True], 4)
35-
-1
36-
>>> min_dist([float('inf'), float('inf')], [False, False], 2)
37-
-1
38-
"""
39-
min_val = float("inf")
40-
min_ind = -1
41-
for i in range(v):
42-
if (not vset[i]) and mdist[i] < min_val:
43-
min_ind = i
44-
min_val = mdist[i]
45-
return min_ind
27+
"""
28+
Finds the vertex with minimum distance that hasn't been visited yet.
29+
>>> min_dist([0, 4, 2, float('inf')], [True, False, False, False], 4)
30+
2
31+
>>> min_dist([0, 4, 2, 1], [True, False, True, False], 4)
32+
3
33+
>>> min_dist([0, 4, 2, 1], [True, True, True, True], 4)
34+
-1
35+
>>> min_dist([float('inf'), float('inf')], [False, False], 2)
36+
-1
37+
"""
38+
min_val = float("inf")
39+
min_ind = -1
40+
for i in range(v):
41+
if (not vset[i]) and mdist[i] < min_val:
42+
min_ind = i
43+
min_val = mdist[i]
44+
return min_ind
4645

4746

4847
def dijkstra(graph, v, src):
49-
"""
50-
Runs Dijkstra's algorithm and prints distances.
51-
>>> g = [
52-
... [0.0, 5.0, float('inf'), 10.0],
53-
... [float('inf'), 0.0, 3.0, float('inf')],
54-
... [float('inf'), float('inf'), 0.0, 1.0],
55-
... [float('inf'), float('inf'), float('inf'), 0.0],
56-
... ]
57-
>>> dijkstra(g, 4, 0)
58-
Vertex Distance
59-
0 0
60-
1 5
61-
2 8
62-
3 9
63-
>>> g2 = [
64-
... [0.0, float('inf')],
65-
... [float('inf'), 0.0],
66-
... ]
67-
>>> dijkstra(g2, 2, 0)
68-
Vertex Distance
69-
0 0
70-
1 INF
71-
>>> dijkstra([[0.0]], 1, 0)
72-
Exception raised:
73-
Traceback (most recent call last):
74-
...
75-
UnboundLocalError: cannot access local variable 'i' where it is not associated with a value
76-
"""
77-
mdist = [float("inf") for _ in range(v)]
78-
vset = [False for _ in range(v)]
79-
mdist[src] = 0.0
48+
"""
49+
Runs Dijkstra's algorithm and prints distances.
50+
>>> g = [
51+
... [0.0, 5.0, float('inf'), 10.0],
52+
... [float('inf'), 0.0, 3.0, float('inf')],
53+
... [float('inf'), float('inf'), 0.0, 1.0],
54+
... [float('inf'), float('inf'), float('inf'), 0.0],
55+
... ]
56+
>>> dijkstra(g, 4, 0)
57+
Vertex Distance
58+
0 0
59+
1 5
60+
2 8
61+
3 9
62+
>>> g2 = [
63+
... [0.0, float('inf')],
64+
... [float('inf'), 0.0],
65+
... ]
66+
>>> dijkstra(g2, 2, 0)
67+
Vertex Distance
68+
0 0
69+
1 INF
70+
>>> dijkstra([[0.0]], 1, 0)
71+
Exception raised:
72+
Traceback (most recent call last):
73+
...
74+
UnboundLocalError: cannot access local variable 'i' where it is not associated with a value
75+
"""
76+
mdist = [float("inf") for _ in range(v)]
77+
vset = [False for _ in range(v)]
78+
mdist[src] = 0.0
8079

81-
for _ in range(v - 1):
82-
u = min_dist(mdist, vset, v)
83-
vset[u] = True
80+
for _ in range(v - 1):
81+
u = min_dist(mdist, vset, v)
82+
vset[u] = True
8483

85-
for i in range(v):
86-
if (
87-
(not vset[i])
88-
and graph[u][i] != float("inf")
89-
and mdist[u] + graph[u][i] < mdist[i]
90-
):
91-
mdist[i] = mdist[u] + graph[u][i]
84+
for i in range(v):
85+
if (
86+
(not vset[i])
87+
and graph[u][i] != float("inf")
88+
and mdist[u] + graph[u][i] < mdist[i]
89+
):
90+
mdist[i] = mdist[u] + graph[u][i]
9291

93-
print_dist(mdist, i)
92+
print_dist(mdist, v)
9493

9594

9695
if __name__ == "__main__":
97-
V = int(input("Enter number of vertices: ").strip())
98-
E = int(input("Enter number of edges: ").strip())
96+
V = int(input("Enter number of vertices: ").strip())
97+
E = int(input("Enter number of edges: ").strip())
9998

100-
graph = [[float("inf") for i in range(V)] for j in range(V)]
99+
graph = [[float("inf") for i in range(V)] for j in range(V)]
101100

102-
for i in range(V):
103-
graph[i][i] = 0.0
101+
for i in range(V):
102+
graph[i][i] = 0.0
104103

105-
for i in range(E):
106-
print("\nEdge ", i + 1)
107-
src = int(input("Enter source:").strip())
108-
dst = int(input("Enter destination:").strip())
109-
weight = float(input("Enter weight:").strip())
110-
graph[src][dst] = weight
104+
for i in range(E):
105+
print("\nEdge ", i + 1)
106+
src = int(input("Enter source:").strip())
107+
dst = int(input("Enter destination:").strip())
108+
weight = float(input("Enter weight:").strip())
109+
graph[src][dst] = weight
111110

112-
gsrc = int(input("\nEnter shortest path source:").strip())
113-
dijkstra(graph, V, gsrc)
111+
gsrc = int(input("\nEnter shortest path source:").strip())
112+
dijkstra(graph, V, gsrc)

0 commit comments

Comments
 (0)