Task-5 Implement Dijkstra's algorithm to compute the shortest path through a graph. Algorithm: Algorithm ShortestPaths(v, cost, dist, n) // dist[j], 1 ≤ j ≤ n, is set to the length of the shortest // path from vertex v to vertex j in a digraph G with n // vertices. dist[v] is set to zero. G is represented by its // cost adjacency matrix cost[1 : n, 1 : n]. { for i := 1 to n do { // Initialize S. S[i] := false; dist[i] := cost[v, i]; } S[v] := true; dist[v] := 0.0; // Put v in S. for num := 2 to n − 1 do { // Determine n − 1 paths from v. Choose u from among those vertices not in S such that dist[u] is minimum; S[u] := true; // Put u in S. for (each w adjacent to u with S[w] = false) do // Update distances. if (dist[w] > dist[u] + cost[u, w]) then dist[w] := dist[u] + cost[u, w]; } } Program: #include <stdio.h> #include <limits.h> #define M 8 int n; void spath(int graph[n][n], int u) { int dist[M]; int s[M] = {0}; for (int i = 0; i < n; i++) { dist[i] = INT_MAX; } dist[u] = 0; for (int i = 0; i < n - 1; i++) { int v; int min = INT_MAX; for (int j = 0; j < n; j++) { if (dist[j] < min && s[j] == 0) { min = dist[j]; v = j; } } s[v] = 1; for (int j = 0; j < n; j++) { if (graph[v][j] != 0 && s[j] == 0) { if (dist[j] > dist[v] + graph[v][j]) { dist[j] = dist[v] + graph[v][j]; } } } } for (int i = 0; i < n; i++) { printf("%d ", dist[i]); } printf("\n"); } int main() { printf("Enter the number of vertices (up to %d): ", M); scanf("%d", &n); int graph[M][M]; printf("Enter the adjacency matrix (use 0 for no direct path):\n"); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &graph[i][j]); } } int startNode; printf("Enter the starting node (0 to %d): ", n - 1); scanf("%d", &startNode); spath(graph, startNode); return 0; } Output: /tmp/q6mNdkXwgB.o Enter the number of vertices (up to 8): 8 Enter the adjacency matrix (use 0 for no direct path): 0 0 0 0 0 0 0 0 300 0 0 0 0 0 0 0 1000 800 0 0 0 0 0 0 0 0 1200 0 0 0 0 0 0 0 0 1500 0 250 0 0 0 0 0 1000 0 0 900 1400 0 0 0 0 0 0 0 1000 1700 0 0 0 0 0 0 0 Enter the starting node (0 to 7): 4 3350 3250 2450 1250 0 250 1150 1650 === Code Execution Successful ===
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter