G.arcs[22][23].adj=G.arcs[23][22].adj=500; G.arcs[23][24].adj=G.arcs[24][23].adj=3700; G.arcs[23][29].adj=G.arcs[29][23].adj=3300; G.arcs[24][25].adj=G.arcs[25][24].adj=3300; G.arcs[24][29].adj=G.arcs[29][24].adj=2000; G.arcs[26][27].adj=G.arcs[27][26].adj=350; G.arcs[27][28].adj=G.arcs[28][27].adj=1200; G.arcs[27][30].adj=G.arcs[30][27].adj=1100; G.arcs[27][31].adj=G.arcs[31][27].adj=1700; G.arcs[31][32].adj=G.arcs[32][31].adj=1800; G.arcs[33][34].adj=G.arcs[34][33].adj=1050; G.arcs[34][35].adj=G.arcs[35][34].adj=1000; G.arcs[36][37].adj=G.arcs[37][36].adj=2600; G.arcs[37][38].adj=G.arcs[38][37].adj=3900; G.arcs[38][39].adj=G.arcs[39][38].adj=4100; G.arcs[40][41].adj=G.arcs[41][40].adj=4000; G.arcs[41][42].adj=G.arcs[42][41].adj=2100; G.arcs[42][43].adj=G.arcs[43][42].adj=4000; }
void narrate() {
int i,k=0;
printf(\※※※※※※※※※欢迎使用最优旅游交通路径程序!※※※※※※※※※\\n\\n\
printf(\该程序由中南大学电子信息专业1002班的两位同学制作\\n\
printf(\公交站点列表如下:\\n\\n\ for(i=0;i printf(\【-】%-10s\.vex[i].site); //输出站点列表 k=k+1; if(k%4==0) printf(\ } } //暂时先定义一个最短路径函数 void shortestpath(int num) { int v,w,i,t; int final[Len]; int min; for(v=0;v 15 final[v]=0 ; D[v]=G.arcs[num][v].adj ; for(w=0;w P[v][num]=1 ; P[v][v]=1 ; } } D[num]=0 ; final[num]=1 ; for(i=0;i min=N ; for(w=0;w v=w ; min=D[w]; } final[v]=1 ; for(w=0;w if(!final[w]&&((min+G.arcs[v][w].adj) D[w]=min+G.arcs[v][w].adj ; for(t=0;t P[w][w]=1 ; } } } //输出最短路径的路线 void output(int site1,int site2) { int a,b,c,d,q=0,max,i=0; int m=0; int f[25]; 记录经过的站点 int t[25][8]; 记录相邻两站之间的相同的公交线 for(c=0;c<25;++c) f[c]=50; 有为50的站点,故用其初始化 16 //f[]//t[][] //没 for(c=0;c<25;++c) for(b=0;b<8;++b) t[c][b]=0; //初始化为 0 a=site2 ; if(a!=site1) { printf(\从【%s】到【%s】的最短路径是:\\n\\n\.vex[site1].site,G.vex[site2].site); printf(\.vex[site1].site); d=site1 ; for(c=0;c P[a][site1]=0 ; for(b=0;b if(G.arcs[d][b].adj printf(\.vex[b].site); f[q]=b; q=q+1 ; P[a][b]=0 ; d=b ; if(q%8==0)printf(\ goto gate; } } } max=q; //此段代码是负责根据最短路径提出乘车方案 if(f[1]==50) { for(c=0;c<8;++c) { if(G.vex[site1].route[c]!=0) { for(b=0;b<8;++b) { if(G.vex[site1].route[c]==G.vex[f[0]].route[b]) {t[0][i]=G.vex[site1].route[c]; i++;} } 17 //由于迪杰斯 } } printf(\你可以乘坐: \ for(i=0;i<8;++i) { if(t[0][i]!=0) { if(i>0) printf(\或 \ printf(\路 \ } } printf(\即可到达目的站\ } else { i=0; for(c=0;c<8;++c) { for(b=0;b<8;++b) { if(G.vex[site1].route[c]==G.vex[f[0]].route[b]) {t[0][i]=G.vex[f[0]].route[b]; i++;} } } for(q=0;q if(t[q+1][0]==0) 果f[q+1]跟前面没有相同路线 { 18 //如 m=m+1; if(m==1) printf(\您可以乘坐: \ for(c=0;c<8;++c) { if(t[q][c]>0&&c>0) printf(\或 \ if(t[q][c]>0) printf(\路\ } printf(\到%s下\.vex[f[q]].site); printf(\ 再搭乘 \ for(c=0;c<8;++c) { for(b=0;b<8;++b) { if(G.vex[f[q]].route[c]==G.vex[f[q+1]].route[b]) {t[q+1][i]=G.vex[f[q+1]].route[b]; i++;} } } } if((q+1)==(max-1)) if(m!=0) //考虑f[q+1]运行到最后一站的情况 { for(c=0;c<8;++c) { if(t[q+1][c]>0&&c>0) printf(\或 \ if(t[q+1][c]>0) printf(\路\ } printf(\即可到达目的站\\n\ } } if(m==0) {printf(\您可以直接坐:\ for(c=0;c<8;++c) {if(t[max-1][c]>0&&c>0) printf(\或 \ if(t[max-1][c]>0) printf(\路\ printf(\即可到达您的目的站\ } } printf(\ (最短距离为 %dm.)\\n\\t\} } 19