#define _crt_secure_no_warnings#include<iostream> #include <string> #include <iomanip> #include <cstdlib> #include <cstdio> #include <vector> #include <algorithm> #include <cmath># Include<map> #include <cassert>using namespace std;const int INF = int_max;struct node{int pre;int dist;bool visited; Node (): Pre ( -1), Dist (INF), visited (false) {}};void DISPT (vector<node> & T) {for (int i = 0; i < t.size (); + +i) {cout << Num: << i << "Dist:" << t[i].dist << "Pre:" << t[i].pre << Endl;} return;} int Extract_min (vector<node> & T) {int mark = -1;for (int i = 0; i < t.size (); ++i) {if (! t[i].visited) {if (Mark = =-1) Mark = I;else if (T[i].dist < t[mark].dist) mark = i;}} return mark;} void Dijkstra (vector<vector<int> > & G, size_t src) {//check validity.if (src >= g.size ()) Return;vecto R<node> T (G.size ()); T[src].dist = 0;for (int i = 0; i < g.size (); ++i) {int tag = extract_min (T); assert (Tag! =-1);//debug. t[tag].visited = true;//update The weights of edges,taversing in the same manner as bfs.for (int j = 0; J < g.size (); + +J) {if (! t[j].visited && g[tag][j]! = INF && t[j].dist > G[tag][j] + t[tag].dist) {t[j].dist = G[tag][j] + t[tag ].dist; T[j].pre = Tag;}}} OUTPUT.DISPT (T);} int main (void) {cout << "Dijkstra algorithm for Directed Graph:" << Endl;while (true) {int n;cout << "Num ber of Nodes: "; Cin >> n;vector<vector<int> >g (n, vector<int> (n, INF)); for (int i = 0; i < N; ++i) G[i][i] = 0;int m;cout << "Number of Edges:"; cin >> m;for (int i = 0; i < M; ++i) {int S, e;cin >> s >> e;cin >> g[s][e];} for (int src = 0; src < N; ++src) {cout << ' from ' << src << ":" << Endl;dijkstra (G, SRC); syst EM ("Pause");}} System ("pause"); return 0;}
C + + implementation Dijkstra algorithm