1 #include <iostream>
2 using namespace std;
3
4 const int INF = 100000;
5 int n=10,path[11][11],dist[11][11],map[11][11];
6
7 /*
8 函数功能:创建地图城市信息
9 函数入口参数:空
10 函数返回值:空
11 */
12 void init(){
13 int i,j;
14 for(i=1;i<=n;i++)
15 for(j=1;j<=n;j++)
16 map[i][j]=(i==j)?0:INF;
17 map[1][2]=45,map[1][3]=35,map[1][4]=50;
18 map[2][3]=20,map[2][6]=90,map[2][9]=70;
19 map[3][5]=50,map[4][5]=50,map[6][7]=20;
20 map[6][8]=50,map[6][9]=50,map[7][1]=40;
21 map[7][4]=40,map[10][9]=5;
22 }
23 /*
24 函数功能:Floyd-Warshall算法
25 函数入口参数:空
26 函数返回值:空
27 */
28 void floyd(){
29 int i,j,k;
30 for(i=1;i<=n;i++)
31 for(j=1;j<=n;j++)
32 dist[i][j]=map[i][j],path[i][j]=0;
33 for(k=1;k<=n;k++)
34 for(i=1;i<=n;i++)
35 for(j=1;j<=n;j++)
36 if(dist[i][k]+dist[k][j]<dist[i][j])
37 dist[i][j]=dist[i][k]+dist[k][j],path[i][j]=k;
38 }
39 /*
40 函数功能:输出途径的城市
41 函数入口参数:空
42 函数返回值:空
43 */
44
45 void output(int i,int j){
46 if(i==j)
47 return;
48 if(path[i][j]==0)
49 { if(j-1==0)cout<<"00 郑州"<<endl;
50 else if(j-1==1)cout<<"01 北京"<<endl;
51 else if(j-1==2)cout<<"02 天津"<<endl;
52 else if(j-1==3)cout<<"03 南昌"<<endl;
53 else if(j-1==4)cout<<"04 上海"<<endl;
54 else if(j-1==5)cout<<"05 贵阳"<<endl;
55 else if(j-1==6)cout<<"06 株洲"<<endl;
56 else if(j-1==7)cout<<"07 广州"<<endl;
57 else if(j-1==8)cout<<"08 兰州"<<endl;
58 else if(j-1==9)cout<<"09 西宁"<<endl;
59
60 }
61 else{
62 output(i,path[i][j]);
63 output(path[i][j],j);
64 }
65 }
66 int main()
67 {
68 int u,v;
69 init();
70 floyd();
71 while(cout<<"请输入俩个城市的编号:")
72 {
73 cin>>u>>v;
74 if(dist[u+1][v+1]==INF)
75 cout<<"这俩个城市的距离为无穷大"<<endl;
76 else{
77 cout<<"途径的城市有:"<<endl;
78 if(u==0)cout<<"00 郑州"<<endl;
79 else if(u==1)cout<<"01 北京"<<endl;
80 else if(u==2)cout<<"02 天津"<<endl;
81 else if(u==3)cout<<"03 南昌"<<endl;
82 else if(u==4)cout<<"04 上海"<<endl;
83 else if(u==5)cout<<"05 贵阳"<<endl;
84 else if(u==6)cout<<"06 株洲"<<endl;
85 else if(u==7)cout<<"07 广州"<<endl;
86 else if(u==8)cout<<"08 兰州"<<endl;
87 else if(u==9)cout<<"09 西宁"<<endl;
88 output(u+1,v+1);
89 cout<<endl;
90 }
91 cout<<"这俩个城市的最短距离为:"<<dist[u+1][v+1]<<endl;
92 cout<<endl;
93 }
94 return 0;
95 }