-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdijkstras.py
85 lines (53 loc) · 1.59 KB
/
dijkstras.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
73
74
75
76
77
78
79
80
## Read input as specified in the question.
## Print output as specified in the question.
import sys
class Graph:
def __init__(self, nVertices):
self.nVertices = nVertices
self.adjMatrix = [[0 for j in range(nVertices)] for i in range(nVertices)]
def addEdge(self, v1, v2, dist):
self.adjMatrix[v1][v2] = dist
self.adjMatrix[v2][v1] = dist
def getMin(self, visited, dist):
min_vertex = -1
for i in range(self.nVertices):
if visited[i] == False and (min_vertex == -1 or dist[min_vertex] > dist[i]):
min_vertex = i
return min_vertex
def dijkstra(self):
visited = [False for i in range(self.nVertices)]
dist = [sys.maxsize for i in range(self.nVertices)]
dist[0] = 0
for i in range(self.nVertices - 1):
min_vertex = self.getMin(visited, dist)
visited[min_vertex] = True
for j in range(self.nVertices):
if visited[j] == False and self.adjMatrix[min_vertex][j] > 0:
if dist[j] > dist[min_vertex] + self.adjMatrix[min_vertex][j]:
dist[j] = dist[min_vertex] + self.adjMatrix[min_vertex][j]
for i in range(self.nVertices):
print(str(i) + " " + str(dist[i]))
li = [int(ele) for ele in input().split()]
n = li[0]
E = li[1]
g = Graph(n)
for i in range(n):
arr = [int(ele) for ele in input().split()]
v1 = arr[0]
v2 = arr[1]
dist = arr[2]
g.addEdge(v1, v2, dist)
g.dijkstra()
'''
I/P
3 3
1 2 6
2 0 2
1 0 2
'''
'''
O/p:
0 0
1 2
2 2
'''