交通图代码C.docx
- 文档编号:25548403
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:19
- 大小:16.93KB
交通图代码C.docx
《交通图代码C.docx》由会员分享,可在线阅读,更多相关《交通图代码C.docx(19页珍藏版)》请在冰豆网上搜索。
交通图代码C
#include
usingnamespacestd;
constintMaxVertexNum=50;
constintMAXEDGE=32767;
constintINFINITY=32767;
intVisited[MaxVertexNum];//访问数组
typedefintVertexType;
typedefintEdgeType;
typedefintDataType;
typedefintPathMatrix;
typedefintshortpathtable;
typedefintDistancMatrix;
typedefstruct
{
VertexTypevexs[MaxVertexNum];
EdgeTypedistance[MaxVertexNum][MaxVertexNum];
EdgeTypemoney[MaxVertexNum][MaxVertexNum];
EdgeTypetime[MaxVertexNum][MaxVertexNum];
intvexsnum,edgesnum;
}MGragh;
voidCreatMGragh(MGragh*G)//邻接矩阵存储
{
inti,j,k;
intx,y,z;
cout<<"请输入顶点数和边数(输入格式为:
顶点数,边数):
"< cin>>G->vexsnum>>G->edgesnum; cout<<"请输入顶点信息(输入格式为: 顶点号 "< for(i=1;i<=G->vexsnum;i++) cin>>G->vexs[i]; for(i=1;i<=G->vexsnum;i++) for(j=1;j<=G->vexsnum;j++) { G->distance[i][j]=INFINITY; G->money[i][j]=INFINITY; G->time[i][j]=INFINITY; } cout<<"请输入每条边对应的两个顶点的序号和距离,价钱,时间(输入格式为: i,j,x,y,z)"< cout<<""< cout<<"城市1"<<""<<"城市2"<<""<<"距离"<<""<<"价钱"<<""<<"时间"< for(k=1;k<=G->edgesnum;k++) { cin>>i>>j>>x>>y>>z; G->distance[i][j]=x; G->distance[j][i]=x; G->money[i][j]=y; G->money[j][i]=y; G->time[i][j]=z; G->time[j][i]=z; } cout<<""< cout<<"城市对应序号: "< cout<<"###################################################################"< cout<<"#1: 北京#2: 长春#3: 成都#4: 大连#5: 福州#"< cout<<"###################################################################"< cout<<"#6: 广州#7: 贵阳#8: 哈尔滨#9: 呼和浩特#10: 昆明#"< cout<<"###################################################################"< cout<<"#11: 兰州#12: 柳州#13: 南昌#14: 南宁#15: 上海#"< cout<<"###################################################################"< cout<<"#16: 沈阳#17: 深圳#18: 天津#19: 武汉#20: 乌鲁木齐#"< cout<<"###################################################################"< cout<<"#21: 西安#22: 西宁#23: 徐州#24: 郑州#25: 株州#"< cout<<"###################################################################"< cout<<""< } voidshortestpath_11(MGragh*G,intv0,PathMatrixp[MaxVertexNum],shortpathtableD[MaxVertexNum]) { inti,v,w,pre; intmin; intfinal[MaxVertexNum]; for(v=1;v<=G->vexsnum;++v) { final[v]=0; D[v]=G->distance[v0][v]; p[v0]=-1; if(D[v] =v0) p[v]=v0; if(D[v]==INFINITY&&v! =v0) p[v]=-2; } D[v0]=0; final[v0]=1; for(i=1;i { min=INFINITY; for(w=1;w<=G->vexsnum;++w) { if(! final[w]) if(D[w] { v=w; min=D[w]; } } final[v]=1; for(w=1;w<=G->vexsnum;++w) if(! final[w]&&(min+G->distance[v][w] { D[w]=min+G->distance[v][w]; p[w]=v; } } cout<<"到任意其它城市的最短距离及其路径: "< for(i=1;i<=G->vexsnum;i++) { if(i==v0) continue; if(p[i]==-2) cout<<"max"<<""< else { cout< pre=p[i]; while(pre>0) { cout<<"<---"< pre=p[pre]; } cout< } } } voidshortestpath_12(MGragh*G,intv0,PathMatrixp[MaxVertexNum],shortpathtableD[MaxVertexNum]) { inti,v,w,pre; intmin; intfinal[MaxVertexNum]; for(v=1;v<=G->vexsnum;++v) { final[v]=0; D[v]=G->money[v0][v]; p[v0]=-1; if(D[v] =v0) p[v]=v0; if(D[v]==INFINITY&&v! =v0) p[v]=-2; } D[v0]=0; final[v0]=1; for(i=1;i { min=INFINITY; for(w=1;w<=G->vexsnum;++w) { if(! final[w]) if(D[w] { v=w; min=D[w]; } } final[v]=1; for(w=1;w<=G->vexsnum;++w) if(! final[w]&&(min+G->money[v][w] { D[w]=min+G->money[v][w]; p[w]=v; } } cout<<"到任意其它所有城市的最少价钱及其路径: "< for(i=1;i<=G->vexsnum;i++) { if(i==v0) continue; if(p[i]==-2) cout<<"max"<<""< else { cout< pre=p[i]; while(pre>0) { cout<<"<----"< pre=p[pre]; } cout< } } } voidshortestpath_13(MGragh*G,intv0,PathMatrixp[MaxVertexNum],shortpathtableD[MaxVertexNum]) { inti,v,w,pre; intmin; intfinal[MaxVertexNum]; for(v=1;v<=G->vexsnum;++v) { final[v]=0; D[v]=G->time[v0][v]; p[v0]=-1; if(D[v] =v0) p[v]=v0; if(D[v]==INFINITY&&v! =v0) p[v]=-2; } D[v0]=0; final[v0]=1; for(i=1;i { min=INFINITY; for(w=1;w<=G->vexsnum;++w) { if(! final[w]) if(D[w] { v=w; min=D[w]; } } final[v]=1; for(w=1;w<=G->vexsnum;++w) if(! final[w]&&(min+G->time[v][w] { D[w]=min+G->time[v][w]; p[w]=v; } } cout<<"到任意其它所有城市的最少时间及其路径: "< for(i=1;i<=G->vexsnum;i++) { if(i==v0) continue; if(p[i]==-2) cout<<"max"<<""< else { cout< pre=p[i]; while(pre>0) { cout<<"<-----"< pre=p[pre]; } cout< } } } voidDisplay(MGraghG,PathMatrixp[MaxVertexNum][MaxVertexNum],DistancMatrixD[MaxVertexNum][MaxVertexNum],intm,intn) { intpre; if(p[m][n]==-2||m==n) cout< **"< else { cout< cout<<"其路径: "< pre=p[m][n]; cout< while(pre>0) { cout<<"<--"< pre=p[m][pre]; } } } voidshortestpath_21(MGraghG,PathMatrixp[MaxVertexNum][MaxVertexNum],DistancMatrixD[MaxVertexNum][MaxVertexNum]) { intv,w,u; for(v=1;v<=G.vexsnum;v++) for(w=1;w<=G.vexsnum;w++) { D[v][w]=G.distance[v][w]; if(D[v][w] p[v][w]=v; else if(v! =w) p[v][w]=-2; else p[v][w]=-1; } for(u=1;u<=G.vexsnum;u++) for(v=1;v<=G.vexsnum;v++) for(w=1;w<=G.vexsnum;w++) if(D[v][u]+D[u][w]==D[v][w]&&v==w) {p[v][w]=-1;} elseif(D[v][u]+D[u][w] =w) { D[v][w]=D[v][u]+D[u][w]; p[v][w]=u; } intm,n; chara; do { cout<<"请输入你想查询的两个城市: "< cin>>m>>n; cout<<"从"< "< Display(G,p,D,m,n); cout<<"是否继续查找(Y/N)"< cin>>a; }while(a=='Y'||a=='y'); } voidshortestpath_22(MGraghG,PathMatrixp[MaxVertexNum][MaxVertexNum],DistancMatrixD[MaxVertexNum][MaxVertexNum]) { intv,w,u; for(v=1;v<=G.vexsnum;v++) for(w=1;w<=G.vexsnum;w++) { D[v][w]=G.money[v][w]; if(D[v][w] p[v][w]=v; else if(v! =w) p[v][w]=-2; else p[v][w]=-1; } for(u=1;u<=G.vexsnum;u++) for(v=1;v<=G.vexsnum;v++) for(w=1;w<=G.vexsnum;w++) if(D[v][u]+D[u][w]==D[v][w]&&v==w) {p[v][w]=-1;} elseif(D[v][u]+D[u][w] =w) { D[v][w]=D[v][u]+D[u][w]; p[v][w]=u; } intm,n; chara; do { cout<<"请输入你想查询的两个城市: "< cin>>m>>n; cout<<"从"< "< Display(G,p,D,m,n); cout<<"是否继续查找(Y/N)"< cin>>a; }while(a=='Y'||a=='y'); } voidshortestpath_23(MGraghG,PathMatrixp[MaxVertexNum][MaxVertexNum],DistancMatrixD[MaxVertexNum][MaxVertexNum]) { intv,w,u; for(v=1;v<=G.vexsnum;v++) for(w=1;w<=G.vexsnum;w++) { D[v][w]=G.time[v][w]; if(D[v][w] p[v][w]=v; else if(v! =w) p[v][w]=-2; else p[v][w]=-1; } for(u=1;u<=G.vexsnum;u++) for(v=1;v<=G.vexsnum;v++) for(w=1;w<=G.vexsnum;w++) if(D[v][u]+D[u][w]==D[v][w]&&v==w) {p[v][w]=-1;} elseif(D[v][u]+D[u][w] =w) { D[v][w]=D[v][u]+D[u][w]; p[v][w]=u; } intm,n; chara; do { cout<<"请输入你想查询的两个城市: "< cin>>m>>n; cout<<"从"< "< Display(G,p,D,m,n); cout<<"是否继续查找(Y/N)"< cin>>a; }while(a=='Y'||a=='y'); } intmain() { PathMatrixp[MaxVertexNum]; shortpathtableD[MaxVertexNum]; int_p[MaxVertexNum][MaxVertexNum]; int_D[MaxVertexNum][MaxVertexNum]; intchoice; intv0; chara; while(choice! =8) { cout<<"########################################################"< cout<<"#交通系统#"< cout<<"########################################################"< cout<<"########################################"< cout<<"# (1)初始化交通图#"< cout<<"# (2)一城市到任意其他城市的距离最短路径#"< cout<<"#(3)一城市到任意其他城市的价钱最短路径#"< cout<<"#(4)一城市到任意其他城市的时间最短路径#"< cout<<"#(5)任意两城市间距离最短路径#"< cout<<"#(6)任意两城市间价钱最短路径#"< cout<<"#(7)任意两城市间时间最短路径#"< cout<<"#(8)退出#"< cout<<"########################################"< cout<<"选择操作: "< cin>>choice; switch(choice) { case1: MGragh*G; G=newMGragh; CreatMGragh(G); break; case2: do { cout<<"请输入起始城市序号: "< cin>>v0; shortestpath_11(G,v0,p,D); cout<<"是否继续查询(Y/N)"< cin>>a; }while(a=='y'||a=='Y'); break; case3: do { cout<<"请输入起始城市序号: "< cin>>v0; shortestpath_12(G,v0,p,D); cout<<"是否继续查询(Y/N)"< cin>>a; }while(a=='y'||a=='Y'); break; case4: do { cout<<"请输入起始城市序号: "< cin>>v0; shortestpath_13(G,v0,p,D); cout<<"是否继续查询(Y/N)"< cin>>a; }while(a=='y'||a=='Y'); break; case5: shortestpath_21(*G,_p,_D); break; case6: shortestpath_22(*G,_p,_D); break; case7: shortestpath_23(*G,_p,_D); break; default: break; } } cout<<"########################################################"< cout<<"#退出#"< cout<<"########################################################"< return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通图 代码