Skip to content

Commit b5c32b9

Browse files
Creating dijkstra's algo implementation in cpp
1 parent 730f81d commit b5c32b9

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

Dijkstra/dijkstras.cpp

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include<bits/stdc++.h>
2+
3+
using namespace std;
4+
5+
int findmin(vector<int> dist,int N,std::vector<int> &freq){
6+
int mint;
7+
for(int i=0;i<N;i++){if(freq[i] == 0){mint = i;break;}}
8+
for(int i=0;((i<N));i++){
9+
if((freq[i]==0)){
10+
if(dist[mint]>dist[i]){mint = i;}
11+
}
12+
}
13+
freq[mint] = 1;
14+
return mint;
15+
}
16+
17+
void printvector(std::vector<int> v,int N){
18+
for(int i=0;i<N;i++)cout<<v[i]<<' ';
19+
cout<<endl;
20+
}
21+
void dijkstras(vector<int> &dist,std::vector<std::vector<int> > l,vector<int> &prev,int N){
22+
// printvector(dist,N);
23+
vector<int> freq;
24+
for(int i=0;i<N;i++){freq.push_back(0);}
25+
dist[0] = 0;
26+
for(int j=0;j<N;j++){
27+
int u = findmin(dist,N,freq);
28+
for(int i=0;i<N;i++){
29+
if(l[u][i] != -1){
30+
if(dist[i] > (dist[u] + l[u][i])){
31+
dist[i] = (dist[u] + l[u][i]);
32+
prev[i] = u;
33+
}
34+
}
35+
}
36+
// printvector(dist,N);
37+
}
38+
}
39+
int main(){
40+
int N;cin>>N;
41+
vector<int> dist,prev;
42+
vector<vector<int>> l;
43+
int E;cin>>E;
44+
45+
vector<int> temp;
46+
for(int i =0;i<N;i++){
47+
temp.push_back(-1);
48+
dist.push_back(INT_MAX);
49+
prev.push_back(-1);
50+
}
51+
for(int i=0;i<N;i++){
52+
l.push_back(temp);
53+
}
54+
55+
for(int i=0;i<E;i++){
56+
int a,b,d;cin>>a>>b>>d; //format is a --(d)--> b represents an edge
57+
l[a-1][b-1] = d;
58+
// l[b][a] = d;
59+
}
60+
61+
dijkstras(dist,l,prev,N);
62+
63+
printvector(prev,N);
64+
}

0 commit comments

Comments
 (0)