# Python program for Dijkstra's single
|
|
# source shortest path algorithm. The program is
|
|
# for adjacency matrix representation of the graph
|
|
|
|
# Library for INT_MAX
|
|
import sys
|
|
|
|
class Graph():
|
|
|
|
def __init__(self, vertices):
|
|
self.V = vertices
|
|
self.graph = [[0 for column in range(vertices)]
|
|
for row in range(vertices)]
|
|
|
|
def printSolution(self, dist):
|
|
print "Vertex tDistance from Source"
|
|
for node in range(self.V):
|
|
print node, "t", dist[node]
|
|
|
|
# A utility function to find the vertex with
|
|
# minimum distance value, from the set of vertices
|
|
# not yet included in shortest path tree
|
|
def minDistance(self, dist, sptSet):
|
|
|
|
# Initilaize minimum distance for next node
|
|
min = sys.maxint
|
|
|
|
# Search not nearest vertex not in the
|
|
# shortest path tree
|
|
for v in range(self.V):
|
|
if dist[v] < min and sptSet[v] == False:
|
|
min = dist[v]
|
|
min_index = v
|
|
|
|
return min_index
|
|
|
|
# Funtion that implements Dijkstra's single source
|
|
# shortest path algorithm for a graph represented
|
|
# using adjacency matrix representation
|
|
def dijkstra(self, src):
|
|
|
|
dist = [sys.maxint] * self.V
|
|
dist[src] = 0
|
|
sptSet = [False] * self.V
|
|
|
|
for cout in range(self.V):
|
|
|
|
# Pick the minimum distance vertex from
|
|
# the set of vertices not yet processed.
|
|
# u is always equal to src in first iteration
|
|
u = self.minDistance(dist, sptSet)
|
|
|
|
# Put the minimum distance vertex in the
|
|
# shotest path tree
|
|
sptSet[u] = True
|
|
|
|
# Update dist value of the adjacent vertices
|
|
# of the picked vertex only if the current
|
|
# distance is greater than new distance and
|
|
# the vertex in not in the shotest path tree
|
|
for v in range(self.V):
|
|
if self.graph[u][v] > 0 and sptSet[v] == False and \
|
|
dist[v] > dist[u] + self.graph[u][v]:
|
|
dist[v] = dist[u] + self.graph[u][v]
|
|
|
|
self.printSolution(dist)
|
|
|
|
# Driver program
|
|
g = Graph(9)
|
|
g.graph = [[0, 4, 0, 0, 0, 0, 0, 8, 0],
|
|
[4, 0, 8, 0, 0, 0, 0, 11, 0],
|
|
[0, 8, 0, 7, 0, 4, 0, 0, 2],
|
|
[0, 0, 7, 0, 9, 14, 0, 0, 0],
|
|
[0, 0, 0, 9, 0, 10, 0, 0, 0],
|
|
[0, 0, 4, 14, 10, 0, 2, 0, 0],
|
|
[0, 0, 0, 0, 0, 2, 0, 1, 6],
|
|
[8, 11, 0, 0, 0, 0, 1, 0, 7],
|
|
[0, 0, 2, 0, 0, 0, 6, 7, 0]
|
|
];
|
|
|
|
g.dijkstra(0);
|
|
|