www.pudn.com > XiaoYuanDaoYouTu.rar > Floyd.cpp
#include#include "Graphm.h" #include "Stock.h" char getView(int number); void Floyd(Graph& G, int **D,int proV,int nextV) { int i,j,v; //i,j是计数器,v记录相应顶点 int** p = new int* [G.VerticesNum()]; //定义一个路径矩阵来保存经过的点 for (int n=0; n (D[i][v]+D[v][j]) for(v=0;v (D[i][v]+D[v][j])) { D[i][j]=D[i][v]+D[v][j]; p[i][j] = v; } } } } /*-----输出最短路径的长度------*/ cout << endl; cout << "("; getView(proV); cout << ")"; cout << "和"; cout << "("; getView(nextV); cout << ")"; cout << "之间的最短距离为:"; cout << D[proV][nextV] << endl; /*------定义一个栈来保存最短路径所经过的景点------*/ Stock st(10); int mid = -1; st.push(nextV); while (mid != proV) { mid = p[proV][nextV]; if (mid != proV) { st.push(mid); } nextV = mid; } st.push(proV); /*------输出最短路径------*/ cout << endl; cout << "其间通过的景点如下:" << endl; for (i=st.m_nTop; i>-1; --i) { cout << getView(st.pop()) << "----"; } cout << endl; /*------消亡路径矩阵--------*/ for (n=0; n