Skip to content

Commit 8459bcd

Browse files
authored
Merge pull request #432 from ushmita4/master
#376 Implementation of Dijkstra's Algorithm using C language.
2 parents 517bc9b + 8b17429 commit 8459bcd

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

Data Structures/Graphs/Dijkstra.c

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#include<stdio.h>
2+
#define size 50
3+
//Time Complexity :- O((nv)^2)
4+
//Space Complexity :- O(nv)
5+
struct vertex{
6+
int dist,par,processed;
7+
}V[size];
8+
int nv;
9+
//relax method is used to assign the shortest value to the node.
10+
void relax(int w[size][size],int u,int v){
11+
if(V[v].dist > V[u].dist + w[u][v]){
12+
V[v].dist = V[u].dist + w[u][v];
13+
V[v].par = u;
14+
}
15+
}
16+
//setting the source value to zero
17+
void initializeSingleSource(int src){
18+
int i;
19+
for(i = 0; i < nv; i++){
20+
V[i].dist = 99999;
21+
V[i].par = -1;
22+
V[i].processed = 0;
23+
}
24+
V[src].dist = 0;
25+
}
26+
27+
void dijkstra(int w[size][size],int src){
28+
int i,j,k,ver,dmin;
29+
initializeSingleSource(src);
30+
for(i = 0; i < nv; i++){
31+
dmin = 999999;
32+
for(k = 0; k < nv; k++){
33+
if(!V[k].processed && V[k].dist < dmin){
34+
dmin = V[k].dist;
35+
ver = k;
36+
}
37+
38+
}
39+
40+
for(j = 0; j < nv; j++){
41+
42+
if(!V[j].processed && w[ver][j]){
43+
relax(w,ver,j);
44+
45+
}
46+
47+
}
48+
V[ver].processed = 1;
49+
50+
}
51+
}
52+
53+
void printPath(int src,int dest){
54+
if(dest == src){
55+
printf("\n%d", src);
56+
return;
57+
}
58+
printPath(src,V[dest].par);
59+
printf(" ------> %d",dest);
60+
61+
}
62+
int main(){
63+
int i,j,src,dest;
64+
int w[size][size];
65+
printf("ENTER NO. OF VERTICES \n");
66+
scanf("%d",&nv);
67+
68+
printf("\nENTER THE WEIGHT MATRIX \n");
69+
for(i = 0; i < nv; i++)
70+
{
71+
for(j = 0; j < nv; j++)
72+
{
73+
scanf("%d",&w[i][j]);
74+
}
75+
}
76+
printf("\nENTER THE SOURCE \n");
77+
scanf("%d",&src);
78+
dijkstra(w,src);
79+
do{
80+
printf("\nENTER THE DESTINATION (ENTER -1 TO QUIT) \n");
81+
scanf("%d",&dest);
82+
if(dest != -1 && dest < nv){
83+
printf("\nSHORTEST PATH WEIGHT = %d\n",V[dest].dist);
84+
printf("\nPATH %d to %d IS",src,dest);
85+
printPath(src,dest);
86+
}
87+
}while(dest != -1 && dest < nv);
88+
return 0;
89+
}
90+

0 commit comments

Comments
 (0)