File tree 1 file changed +64
-0
lines changed
1 file changed +64
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments