From d59dd12d6275c101f673fb65de39de3dcce593bc Mon Sep 17 00:00:00 2001 From: SMARTA SANGUI <40299522+SMARTA01@users.noreply.github.com> Date: Sat, 31 Oct 2020 09:43:53 +0530 Subject: [PATCH] Dijkstra's Algorithm Implementation of Dijkstra's Algorithm in C. --- Dijkstra's Algorithm | 75 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Dijkstra's Algorithm diff --git a/Dijkstra's Algorithm b/Dijkstra's Algorithm new file mode 100644 index 00000000..0b5f9613 --- /dev/null +++ b/Dijkstra's Algorithm @@ -0,0 +1,75 @@ +#include +#define INFINITY 9999 +#define MAX 10 + +void dijikstra(int G[MAX][MAX], int n, int startnode); + +void main() +{ + int G[MAX][MAX], i, j, n, u; + + printf("\nEnter the no. of vertices:: "); + scanf("%d", &n); + printf("\nEnter the adjacency matrix::\n"); + for(i=0;i < n;i++) + for(j=0;j < n;j++) + scanf("%d", &G[i][j]); + printf("\nEnter the starting node:: "); + scanf("%d", &u); + dijikstra(G,n,u); + +} + +void dijikstra(int G[MAX][MAX], int n, int startnode) +{ + int cost[MAX][MAX], distance[MAX], pred[MAX]; + int visited[MAX], count, mindistance, nextnode, i,j; + for(i=0;i < n;i++) + for(j=0;j < n;j++) + if(G[i][j]==0) + cost[i][j]=INFINITY; + else + cost[i][j]=G[i][j]; + + for(i=0;i< n;i++) + { + distance[i]=cost[startnode][i]; + pred[i]=startnode; + visited[i]=0; + } + distance[startnode]=0; + visited[startnode]=1; + count=1; + while(count < n-1){ + mindistance=INFINITY; + for(i=0;i < n;i++) + if(distance[i] < mindistance&&!visited[i]) + { + mindistance=distance[i]; + nextnode=i; + } + visited[nextnode]=1; + for(i=0;i < n;i++) + if(!visited[i]) + if(mindistance+cost[nextnode][i] < distance[i]) + { + distance[i]=mindistance+cost[nextnode][i]; + pred[i]=nextnode; + } + count++; + } + + for(i=0;i < n;i++) + if(i!=startnode) + { + printf("\nDistance of %d = %d", i, distance[i]); + printf("\nPath = %d", i); + j=i; + do + { + j=pred[j]; + printf(" <-%d", j); + } + while(j!=startnode); + } +}