|
| 1 | + |
| 2 | +def printDist(dist, V): |
| 3 | + print("\nVertex Distance") |
| 4 | + for i in range(V): |
| 5 | + if dist[i] != float('inf') : |
| 6 | + print(i,"\t",int(dist[i]),end = "\t") |
| 7 | + else: |
| 8 | + print(i,"\t","INF",end="\t") |
| 9 | + print(); |
| 10 | + |
| 11 | +def minDist(mdist, vset, V): |
| 12 | + minVal = float('inf') |
| 13 | + minInd = -1 |
| 14 | + for i in range(V): |
| 15 | + if (not vset[i]) and mdist[i] < minVal : |
| 16 | + minInd = i |
| 17 | + minVal = mdist[i] |
| 18 | + return minInd |
| 19 | + |
| 20 | +def Dijkstra(graph, V, src): |
| 21 | + mdist=[float('inf') for i in range(V)] |
| 22 | + vset = [False for i in range(V)] |
| 23 | + mdist[src] = 0.0; |
| 24 | + |
| 25 | + for i in range(V-1): |
| 26 | + u = minDist(mdist, vset, V) |
| 27 | + vset[u] = True; |
| 28 | + |
| 29 | + for v in range(V): |
| 30 | + if (not vset[v]) and graph[u][v]!=float('inf') and mdist[u] + graph[u][v] < mdist[v]: |
| 31 | + mdist[v] = mdist[u] + graph[u][v] |
| 32 | + |
| 33 | + |
| 34 | + |
| 35 | + printDist(mdist, V) |
| 36 | + |
| 37 | + |
| 38 | + |
| 39 | +#MAIN |
| 40 | +V = int(input("Enter number of vertices: ")); |
| 41 | +E = int(input("Enter number of edges: ")); |
| 42 | + |
| 43 | +graph = [[float('inf') for i in range(V)] for j in range(V)] |
| 44 | + |
| 45 | +for i in range(V): |
| 46 | + graph[i][i] = 0.0; |
| 47 | + |
| 48 | +for i in range(E): |
| 49 | + print("\nEdge ",i+1) |
| 50 | + src = int(input("Enter source:")) |
| 51 | + dst = int(input("Enter destination:")) |
| 52 | + weight = float(input("Enter weight:")) |
| 53 | + graph[src][dst] = weight; |
| 54 | + |
| 55 | +gsrc = int(input("\nEnter shortest path source:")) |
| 56 | +Dijkstra(graph, V, gsrc) |
0 commit comments