1
+ // A C++ program for Dijkstra's single source shortest path algorithm.
2
+
3
+ #include <stdio.h>
4
+ #include <stdbool.h>
5
+ #include <stdlib.h>
6
+ #include <assert.h>
7
+ #define N 100
8
+ #define I __INT_MAX__
9
+
10
+ typedef long long int ll ;
11
+ void dijkstra (ll m [][N ], ll vertex , ll source , ll e )
12
+ {
13
+ ll dist [N ];
14
+ ll min = I ;
15
+ ll included [N ] = {0 };
16
+ ll n ;
17
+ ll counter = 0 ;
18
+
19
+ for (ll i = 1 ; i <= vertex ; i ++ )
20
+ {
21
+ dist [i ] = m [source ][i ];
22
+ if (dist [i ] < min )
23
+ {
24
+ min = dist [i ];
25
+ n = i ;
26
+ }
27
+ }
28
+ dist [source ] = 0 ;
29
+
30
+ while (counter < vertex )
31
+ {
32
+
33
+ counter ++ ;
34
+ included [source ] = 1 ;
35
+ included [n ] = 1 ;
36
+
37
+ for (ll u = 1 ; u <= vertex ; u ++ )
38
+ {
39
+ if ((dist [n ] + m [n ][u ] < dist [u ]) && (included [u ] == 0 ))
40
+ {
41
+ dist [u ] = dist [n ] + m [n ][u ];
42
+ }
43
+ }
44
+
45
+ min = I ;
46
+ for (ll i = 1 ; i <= vertex ; i ++ )
47
+ {
48
+ if ((dist [i ] < min ) && (included [i ] == 0 ))
49
+ {
50
+ min = dist [i ];
51
+ n = i ;
52
+ }
53
+ }
54
+ }
55
+
56
+ for (ll i = 1 ; i <= vertex ; i ++ )
57
+ {
58
+ if (dist [i ] != I )
59
+ printf ("%lld " , dist [i ]);
60
+ else
61
+ printf ("inf " );
62
+ }
63
+ printf ("\n" );
64
+ }
65
+ int main ()
66
+ {
67
+ ll n , e ;
68
+
69
+ scanf ("%lld %lld" , & n , & e );
70
+ ll weightedEdges [3 ][N ];
71
+ ll adjMatrix [N ][N ] = {0 };
72
+ for (ll i = 0 ; i < e ; i ++ )
73
+ {
74
+ //vertex 1, vertex 2, weight
75
+ scanf ("%lld %lld %lld" , & weightedEdges [0 ][i ], & weightedEdges [1 ][i ], & weightedEdges [2 ][i ]);
76
+ }
77
+
78
+ for (ll i = 0 ; i < e ; i ++ )
79
+ {
80
+ ll j = weightedEdges [0 ][i ];
81
+ ll k = weightedEdges [1 ][i ];
82
+ adjMatrix [j ][k ] = weightedEdges [2 ][i ];
83
+ }
84
+
85
+ for (ll i = 1 ; i <= n ; i ++ )
86
+ {
87
+ for (ll j = 1 ; j <= n ; j ++ )
88
+ {
89
+ if (adjMatrix [i ][j ] == 0 )
90
+ {
91
+ adjMatrix [i ][j ] = I ;
92
+ }
93
+ }
94
+ }
95
+ }
0 commit comments