Skip to content

Commit 5266e88

Browse files
committed
#376 Implementation of Dijkstra's algorithm.
1 parent 8796ef3 commit 5266e88

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

Data Structures/Graphs/Dijkstra.c

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include<stdio.h>
2+
#define size 50
3+
struct vertex{
4+
int dist,par,processed;
5+
}V[size];
6+
int nv;
7+
//relax method is used to assign the shortest value to the node.
8+
void relax(int w[size][size],int u,int v){
9+
//printf("RELAX %d %d\n",u,v);
10+
if(V[v].dist > V[u].dist + w[u][v]){
11+
V[v].dist = V[u].dist + w[u][v];
12+
V[v].par = u;
13+
}
14+
}
15+
16+
void initializeSingleSource(int src){
17+
int i;
18+
for(i = 0; i < nv; i++){
19+
//printf("HERE ");
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+
//printf("HERE ");
33+
for(k = 0; k < nv; k++){
34+
if(!V[k].processed && V[k].dist < dmin){
35+
dmin = V[k].dist;
36+
ver = k;
37+
}
38+
// printf("K LOOP %d %d %d %d \n",k,ver,V[k].processed,V[k].dist);
39+
}
40+
//printf("BETWEEN K AND J LOOP\n");
41+
for(j = 0; j < nv; j++){
42+
//printf("j = %d V[j].processed = %d w[ver][j] = %d ",j,V[j].processed,w[ver][j]);
43+
if(!V[j].processed && w[ver][j]){
44+
relax(w,ver,j);
45+
// printf("J LOOP %d \n",ver);
46+
}
47+
// printf("J LOOP END\n");
48+
}
49+
V[ver].processed = 1;
50+
//printf("I LOOP %d \n",V[ver].processed);
51+
}
52+
}
53+
54+
void printPath(int src,int dest){
55+
if(dest == src){
56+
printf("\n%d", src);
57+
return;
58+
}
59+
printPath(src,V[dest].par);
60+
printf(" ------> %d",dest);
61+
62+
}
63+
int main(){
64+
int i,j,src,dest;
65+
int w[size][size];
66+
printf("ENTER NO. OF VERTICES \n");
67+
scanf("%d",&nv);
68+
// int w[5][5] = {{0,10,0,5,0},
69+
// {0,0,1,2,0},
70+
// {0,0,0,0,4},
71+
// {0,3,9,0,2},
72+
// {7,0,6,0,0}};
73+
// printf("-------- THE WEIGHT MATRIX --------\n");
74+
// for(i = 0; i < nv; i++)
75+
// {
76+
// for(j = 0; j < nv; j++)
77+
// {
78+
// printf("w[%d][%d] = %d ",i,j,&w[i][j]);
79+
// }
80+
// printf("\n");
81+
// }
82+
printf("\nENTER THE WEIGHT MATRIX \n");
83+
for(i = 0; i < nv; i++)
84+
{
85+
for(j = 0; j < nv; j++)
86+
{
87+
scanf("%d",&w[i][j]);
88+
}
89+
}
90+
printf("\nENTER THE SOURCE \n");
91+
scanf("%d",&src);
92+
dijkstra(w,src);
93+
do{
94+
printf("\nENTER THE DESTINATION (ENTER -1 TO QUIT) \n");
95+
scanf("%d",&dest);
96+
if(dest != -1 && dest < nv){
97+
printf("\nSHORTEST PATH WEIGHT = %d\n",V[dest].dist);
98+
printf("\nPATH %d to %d IS",src,dest);
99+
printPath(src,dest);
100+
}
101+
}while(dest != -1 && dest < nv);
102+
return 0;
103+
}
104+

0 commit comments

Comments
 (0)