Floyd 算法 打印路径模板
#include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> #include <vector> #include <queue> #include <cmath> #include <cstring> using namespace std; #define INF 0xfffffff #define maxn 40 int G[maxn][maxn], Path[maxn][maxn], n; void Floyd() { for(int k=1; k<=n; k++) { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(G[i][j] > G[i][k] + G[k][j]) { G[i][j] = G[i][k] + G[k][j]; Path[i][j] = Path[i][k]; } } } } } void PutPath(int Star,int End) { while(Star != End) { printf("%d---->", Star); Star = Path[Star][End]; } printf("%d\n", End); } void Init() { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { Path[i][j] = j; } } } int main() { cin >> n; Init(); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { cin >> G[i][j]; if(G[i][j] == -1) G[i][j] = INF; } } Floyd(); PutPath(1,n); printf("%d\n", G[1][n]); return 0; } /* 4 -1 1 -1 -1 -1 -1 1 -1 -1 -1 -1 1 -1 -1 -1 -1 */
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。