C++實現帶路徑記錄的Floyd-Warshall演算法

來源:互聯網
上載者:User

標籤:

#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;void ch_status(vector<vector<int> > & W, vector<vector<int> > & P, int nNodes) {//DP, just like bellmanford.for (int i = 0; i < nNodes; ++i) {for (int j = 0; j < nNodes; ++j) {if (i == j || W[i][j] == INF)P[i][j] = -1;elseP[i][j] = i;}}for (int k = 0; k < nNodes; ++k) {for (int i = 0; i < nNodes; ++i) {for (int j = 0; j < nNodes; ++j) {if (W[i][j] > W[i][k] + W[k][j]) {W[i][j] = W[i][k] + W[k][j];P[i][j] = P[k][j];}}}}}void display(const vector<vector<int> > & W) {int nNodes = W.size();for (int i = 0; i < nNodes; ++i) {for (int j = 0; j < nNodes; ++j) {cout << " " << setw(3) << W[i][j];}cout << endl;}}int main(void) {cout << "Floyd-Warshall algorithm for Directed Acyclic Graph: " << endl;while (true) {int nNodes;cout << "Number of Nodes: ";cin >> nNodes;vector<vector<int> > Wgt(nNodes, vector<int>(nNodes, INF));for (int i = 0; i < nNodes; ++i)Wgt[i][i] = 0;int nEdges;cout << "Number of 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];elsecout << " " << "INF";}cout << endl;}//O(n^3), amazing, the fastest ever known!!vector<vector<int> > P(nNodes, vector<int>(nNodes));while (true) {ch_status(Wgt, P ,nNodes);cout << "Dist:" << endl;display(Wgt);cout << "Pre: " << endl;display(P);system("pause");}}return 0;}

C++實現帶路徑記錄的Floyd-Warshall演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.