#ifndef GUIDE_H_INCLUDED #define GUIDE_H_INCLUDED #define MX 1000 //最大值 无穷 #define NUM 17 //最大顶点个数 typedef int adjmatrix[NUM][NUM]; typedef int path[NUM][NUM][NUM]; const int vexs[NUM] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; int arcs[NUM][NUM] = { {0 ,20,MX,MX,20,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX}, {20,0 ,30,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX}, {MX,30,0 ,20,MX,30,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX}, {MX,MX,20,0 ,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX}, {20,MX,MX,MX,0 ,10,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX}, {MX,MX,30,MX,10,0 ,20,50,MX,MX,MX,MX,MX,MX,MX,MX,MX}, {MX,MX,MX,MX,MX,20,0 ,40,10,MX,MX,MX,MX,MX,MX,MX,MX}, {MX,MX,MX,MX,MX,50,40,0 ,MX,20,20,MX,MX,MX,MX,MX,MX}, {MX,MX,MX,MX,MX,MX,10,MX,0 ,20,MX,MX,MX,30,MX,MX,MX}, {MX,MX,MX,MX,MX,MX,MX,20,20,0 ,20,MX,MX,MX,MX,MX,MX}, {MX,MX,MX,MX,MX,MX,MX,20,MX,20,0 ,20,MX,MX,MX,MX,MX}, {MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,20,0 ,10,MX,MX,MX,MX}, {MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,10,0 ,MX,MX,20,MX}, {MX,MX,MX,MX,MX,MX,MX,MX,30,MX,MX,MX,MX,0 ,20,MX,MX}, {MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,20,0 ,20,MX}, {MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,20,MX,20,0 ,40}, {MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,MX,40,0 } }; #endif
#includeusing namespace std; #include "guide.h" //===================================================== void Floeyd( adjmatrix G, adjmatrix D, path P ) {//利用弗洛伊德算法求图GA中每对顶点间的最短长度,对应存于二维数组A中 for(int v=0; v end { adjmatrix D; //D[i,j]表示从i到j的最短距离; path P; //P[i,j]表示从i到j的最短路径上j的父节点 Floeyd( GA, D, P ); cout << D[a][b] << endl; cout << "路径为:"; if( judge==1 ) { for(int u=a;u"; a=u; } } cout << b+1 << endl; } else if( judge==0 ) { int i=0; int t[NUM]={0}; for(int u=a;u1; i--) { cout << t[i] << "->"; } cout << t[1] << endl; } } void ShortestPath() { int start = 5; int end = 5; cout << "输入出发点和目的地编号 (1~17 空格分隔)" << endl; cin >> start >> end; if(start>0 && start<18 && end>0 && end<18) { cout <<"从"<< start; cout << "到" << end ; cout << "的最短路径长度 :" ; if(start<=end) guide( arcs, start-1, end-1 ,1); else guide( arcs, end-1, start-1 ,0); } else cout << "没有这个地方!" << endl; } //============== mian文件 ============= int main() { char choose=0; cout << "************************" << endl; cout << " a.x到y的最短路径 " << endl; cout << " b.退出 " << endl; cout << " 版本号v1.8 " << endl; cout << "************************" << endl; cin >> choose; while( choose!='b' ) { if( choose=='a' ) { ShortestPath(); cout << "===========================" << endl; cout << " a.x到y的最短路径 b.退出 " << endl; cout << "===========================" << endl; } else if(choose!='a'||choose!='b') cout << "输入错误,请重新输入:"; cin >> choose; } return 0; }