**C Program to Find shortest Path using Dijkstra’s algorithm** : Dijkstra’s algorithm is a graph search algorithm that solves the single-source shortest path problem for a graph with non-negative edge path costs, producing a shortest path tree. This algorithm is often used in routing and as a subroutine in other graph algorithm.

## Dijkstra’s Algorithm to find shortest Path :

Let the node at which we are starting be called the **initial node**. Let the **distance of node Y** be the distance from the **initial node** to Y. Dijkstra’s algorithm will assign some initial distance values and will try to improve them step by step.

- Assign to every node a tentative distance value: set it to zero for our initial node and to infinity for all other nodes.
- Mark all nodes unvisited. Set the initial node as current. Create a set of the unvisited nodes called the
*unvisited set*consisting of all the nodes except the initial node. - For the current node, consider all of its unvisited neighbors and calculate their
*tentative*distances. For example, if the current node A is marked with a distance of 6, and the edge connecting it with a neighbor B has length 2, then the distance to B (through A) will be 6+2=8. If this distance is less than the previously recorded tentative distance of B, then overwrite that distance. Even though a neighbor has been examined, it is not marked as “visited” at this time, and it remains in the*unvisited set*. - When we are done considering all of the neighbors of the current node, mark the current node as visited and remove it from the
*unvisited set*. A visited node will never be checked again. - If the destination node has been marked visited (when planning a route between two specific nodes) or if the smallest tentative distance among the nodes in the
*unvisited set*is infinity (when planning a complete traversal), then stop. The algorithm has finished. - Select the unvisited node that is marked with the smallest tentative distance, and set it as the new “current node” then go back to step 3.

Let’s see how to write a C program to implement Dijkstra’s Algorithm to find Shortest Path.

# C Program to Find shortest Path using Dijkstra’s algorithm :

#include<stdio.h> #include<conio.h> #include<process.h> #include<string.h> #include<math.h> #define IN 99 #define N 6 int dijkstra(int cost[][N], int source, int target); int dijsktra(int cost[][N],int source,int target) { int dist[N],prev[N],selected[N]={0},i,m,min,start,d,j; char path[N]; for(i=1;i< N;i++) { dist[i] = IN; prev[i] = -1; } start = source; selected[start]=1; dist[start] = 0; while(selected[target] ==0) { min = IN; m = 0; for(i=1;i< N;i++) { d = dist[start] +cost[start][i]; if(d< dist[i]&&selected[i]==0) { dist[i] = d; prev[i] = start; } if(min>dist[i] && selected[i]==0) { min = dist[i]; m = i; } } start = m; selected[start] = 1; } start = target; j = 0; while(start != -1) { path[j++] = start+65; start = prev[start]; } path[j]='\0'; strrev(path); printf("%s", path); return dist[target]; } int main() { int cost[N][N],i,j,w,ch,co; int source, target,x,y; printf("\tShortest Path Algorithm(DIJKSRTRA's ALGORITHM\n\n"); for(i=1;i< N;i++) for(j=1;j< N;j++) cost[i][j] = IN; for(x=1;x< N;x++) { for(y=x+1;y< N;y++) { printf("Enter the weight of the path between node %d and %d: ",x,y); scanf("%d",&w); cost [x][y] = cost[y][x] = w; } printf("\n"); } printf("\nEnter The Source:"); scanf("%d", &source); printf("\nEnter The target"); scanf("%d", &target); co = dijsktra(cost,source,target); printf("\nShortest Path: %d",co); }

We hope you all have enjoyed the Shortest Path Dijkstra’s Algorithm. If you have any doubts or any queries ask me in form of comments.

MarinaMay 25, 2013 at 4:09 pm -clear and excellent code!

codyJune 22, 2013 at 7:00 pm -hey guys !! may I have an exemple of this program ?? when I entred the weight of each path in other to get the value of the shortest path i see that it s not working

MakeshJuly 27, 2013 at 6:59 pm -Thanks

SASIKALASeptember 9, 2013 at 4:40 am -I NEED THE SAME AS DISPLAYING ALL POSSIBLE PATHS.THANKS

biswarupaOctober 29, 2013 at 2:40 pm -plz give this program output

vikasNovember 13, 2013 at 12:02 pm -hey !! if i want to display path from source and destination in this code than ?

TarikJanuary 8, 2014 at 9:17 am -WHY U START INDEXES FROM 1 ON ARRAYS. THIS IS A C PROGRAM . DAMN

jazzFebruary 15, 2014 at 3:37 pm -hey add this at the end before closing curly bracket:

getch();

return (o);

then u get the correct output.

thenmozhiFebruary 23, 2014 at 4:43 pm -its really usefull 4 me thank u very much

gajendra ojhaApril 9, 2014 at 11:04 am -nalayako tumhe bnana ata h program…. aye bade… kamino run b ni kr rha… bezzati krwa di hamari… tumhari wajah se attendence b ni mili… haramiyo maroge tum….

gajendra ojhaApril 9, 2014 at 11:05 am -sahi bol ra h je chora..

srikanthJune 30, 2014 at 10:00 am -when i run it on putty it displays the error like

“undefined reference to strrev”

please give me the clear reply…

GersySeptember 21, 2014 at 11:54 pm -I never knew how to code graph algorithms because I only got sources where they show examples with highly complicated code. This code is written in such a way that somebody who just started to learn how to program can follow what is happening here! Helped me a lot THANKS!