OneCompiler

dijkstras shortest path

94

class Graph:
def init(self, vertices):
self.v = vertices
self.graph = [[0 for col in range(vertices)] for row in range(vertices)]

def minDistance(self, dist, visited):
    min_val = 1e7
    min_index = 0
    for i in range(self.v):
        if dist[i] < min_val and not visited[i]:
            min_val = dist[i]
            min_index = i
    return min_index

def printSolution(self, dist):
    print("Vertex \t Distance from source")
    for node in range(self.v):
        print(node, "\t\t", dist[node])

def dijkstra(self, src):
    dist = [1e7] * self.v
    dist[src] = 0
    visited = [False] * self.v

    for _ in range(self.v):
        u = self.minDistance(dist, visited)
        visited[u] = True

        for v in range(self.v):
            if self.graph[u][v] > 0 and not visited[v] and dist[v] > dist[u] + self.graph[u][v]:
                dist[v] = dist[u] + self.graph[u][v]
    
    self.printSolution(dist)

vertices = int(input("Enter the number of vertices: "))
g = Graph(vertices)

g.graph = [
[0, 1, 0, 2, 0],
[1, 0, 2, 0, 0],
[0, 2, 0, 2, 8],
[2, 0, 2, 0, 3],
[0, 0, 8, 3, 0]
]

value = int(input("Enter the starting point: "))
g.dijkstra(value)