Djsktra algorithm is used to find shortest path between two vertices in a graph
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <climits>
using namespace std;
long long getMinimumIndex (long long start, vector < vector < long long > > &a, vector < long long > & dis, vector < long long > &spf) {
long long min_index = 1;
for (long long i = 1; i < dis.size(); i++) {
if (!spf[i]) {
min_index = i;
break;
}
}
long long min_value = dis[min_index];
for (long long i = 1; i < dis.size(); i++){
if (min_value > dis[i] && !spf[i]) {
min_value = dis[i];
min_index = i;
}
}
return min_index;
}
void djkstra (vector <vector <long long> > &a, const long long & start, const long long & nodes) {
vector <long long> dis (nodes + 1);
vector <long long> spf (nodes + 1);
long long min_index = 0;
std::fill (dis.begin(), dis.end(), LLONG_MAX);
std::fill (spf.begin(), spf.end(), 0);
dis[start] = 0;
for (int i = 1; i <= nodes; i++) {
min_index = getMinimumIndex (i, a, dis, spf);
cout<<"\n The selected index is "<<min_index;
spf[min_index] = 1;
for (int j = 1; j <= nodes; j++) {
if (a[min_index][j]) {
if (dis[j] > dis[min_index] + a[min_index][j]) {
dis[j] = dis[min_index] + a[min_index][j];
}
}
}
/*for (long long i = 1; i <= nodes; i++) {
if (i != start) {
cout<<dis[i]<<" ";
}
}*/
}
for (long long i = 1; i <= nodes; i++){
if (i != start) {
if (dis[i] != LLONG_MAX){
cout<<dis[i]<<" ";
} else {
cout<<"-1"<<" ";
}
}
}
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int t;
cin>>t;
while (t--) {
long long nodes;
long long edges;
long long start = 0;
cin>>nodes>>edges;
vector < vector <long long> > a (nodes + 1, vector < long long > (nodes + 1));
for (long long i = 1; i <= nodes; i++) {
std::fill(a[i].begin(), a[i].end(), 0);
}
for (long long i = 1; i <= edges; i++) {
long long from, to, dis;
cin>>from>>to>>dis;
if (!a[from][to] || a[from][to] > dis) {
a[from][to] = dis;
a[to][from] = dis;
}
}
cin>>start;
djkstra (a, start, nodes);
cout<<"\n";
}
return 0;
}