#include <iostream> #include <cctype> #include <sstream> #include <string> #include < algorithm> #include <map> #include <cstring> #include <cstdio> #include <iomanip> #include <vector> #include <queue>using namespace std;const int INF = 100000000;struct Node{int dist;int pre; Node (): Dist (INF), pre ( -1) {}};int main (void) {cout << "Bellmanford algorithm for Directed acyclic" Graph: "<< ; Endl;while (true) {int nnodes;cout << "number of Nodes:"; cin >> nnodes;vector<vector<int> > Wgt (n Nodes, Vector<int> (Nnodes, INF)); for (int i = 0; i < nnodes; ++i) wgt[i][i] = 0;int nedges;cout << "Number O F Edges: "; Cin >> nedges;cout <<" SRC Dest Dist (< "<< INF <<"): "<< endl;for (int i = 0; i < nedges; ++i) {int src, dest, dist;cout << "[" << I << "]:"; CIN >> src >> dest >> Dist; Wgt[src][dest] = dist;} for (int i = 0; i < nnodes;++i) {for (int j = 0; j < nnodes; ++j) {if (wgt[i][j]! = INF) cout << "" << setw (3) << Wgt[i][j];else cout << "" << "INF";} cout << Endl;} Bellmanford//initialize_single_sourcevector<node> Rec (nnodes); Rec[0].dist = 0;//relaxfor (int k = 0; k < nNodes-1; ++k)//nnodes steps.for (int i = 0; i < nnodes; ++i) {for (int j = 0; J < Nnodes; ++J) {if (wgt[i][j]! = INF) if (Rec[j].dist > Wgt[i][j] + rec[i].dist) {rec[j].dist = wgt[i][j] + rec[i].dist; Rec[j].pre = i;}}} check_weightfor (int i = 0; i < nnodes; ++i) {for (int j = 0; j < nnodes; ++j) {if (wgt[i][j]! = INF) if (rec[j].di St > Wgt[i][j] + rec[i].dist) {cout << negative weight circut. << Endl;}} for (int i = 0; i < nnodes; ++i) {cout << "[" << I << "] Dist:" << rec[i].dist << ", Pr E: "<< rec[i].pre << Endl;}} return 0;}
C + + implementation Bellmanford algorithm