您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 数据结构《交通咨询系统》完整代码
#includestdio.h#includestdlib.h#includeassert.h#includestring.h#definezuida32767#definemax20typedefstructlu{intdistance;intcost;inttime;}lu,lujin[max][max];typedefstructcity{charname[20];}citys[max];typedefstruct{citysclist;lujinarcs;intc_n,l_n;}Graph;typedefstruct{charadjvex;intmincost;intmindistance;intmintime;}closedge;voidzairu(Graph*G);voidAdminister(GraphG);voidshow(GraphG);intinsertcity(Graph*G);intinsertlu(Graph*G);intLocated(Graph*G,char*p);voidbaocun(GraphG);intserchlu(Graph*G);intmain(){inty,j;GraphG;zairu(&G);//载入交通信息while(1){system(cls);printf(\n\n\n\n\n\n);printf(**********************************欢迎使用交通咨询系统**************************\n\n);printf(\t\t\t※※※※※※※※※※※※※※※※※※※※※\n);printf(\t\t\t※※1=管理员管理※\n);printf(\t\t\t※※2=用户咨询路径※\n);printf(\t\t\t※※3=显示交通系统信息※\n);printf(\t\t\t※※4=退出※\n);printf(\t\t\t※※※※※※※※※※※※※※※※※※※※※\n\n\n);printf(********************************************************************************\n);printf(\t\t\t请选择?);scanf(%d,&y);getchar();switch(y){case1:system(cls);Administer(G);break;//管理员case2:system(cls);j=serchlu(&G);break;//用户case3:show(G);//显示所有路径break;case4:system(cls);printf(\n\n\n\t\t\t\t谢谢使用.......\n\n\n\n);exit(0);break;default:printf(请按提示重新输入!!!!!\n);}}return0;}voidAdminister(GraphG)/*显示管理员管理项目选择界面*/{inti,j=0,x,y;charpassword[5],a;printf(请输入登陆密码(admin)|错误三次退出|:);while(1){for(x=0;x5;x++){scanf(%c,&a);password[x]=a;}if(password[0]!='a'||password[1]!='d'||password[2]!='m'||password[3]!='i'||password[4]!='n'){printf(输入错误,请重新输入!\n密码:);j++;if(j==3)exit(0);scanf(%c,&a);}elsebreak;}system(cls);while(1){printf(\n\n\n\n\n\n);printf(********************************************************************************\n\n);printf(\t\t\t※※※※※※※请选择管理项目※※※※※※\n);printf(\t\t\t※※1=增加城市※\n);printf(\t\t\t※※2=增加旅游路径※\n);printf(\t\t\t※※3=返回上一级菜单※\n);printf(\t\t\t※※※※※※※※※※※※※※※※※※※※\n\n\n);printf(********************************************************************************\n);printf(选择?);scanf(%d,&y);switch(y){case1:i=insertcity(&G);/*增加城市*/if(i==-1)printf(该城市已经存在!!!!\n);elseprintf(增加成功!!!\n);break;case2:i=insertlu(&G);/*增加路径*/if(i==-1)printf(增加失败、不存在此城市!!!!\n);elseprintf(增加成功!!!!\n);break;case3:baocun(G);system(cls);main();break;/*返回主菜单*/default:printf(请按提示重新输入!!!!!\n);}}}intinsertlu(Graph*G)//增加城市交通信息{charFromc[20],Toc[20];inti,j;intd,c,t;printf(输入增加路径的出发城市、目的城市、距离(公里)、花费(元)、时间(小时):\n);scanf(%s%s%d%d%d,Fromc,Toc,&d,&c,&t);getchar();i=Located(G,Fromc);j=Located(G,Toc);if(i==-1||j==-1)return-1;else{G-arcs[i][j].distance=G-arcs[j][i].distance=d;G-arcs[i][j].cost=G-arcs[j][i].cost=c;G-arcs[i][j].time=G-arcs[j][i].time=t;G-l_n++;}return1;}intinsertcity(Graph*G)//增加城市{charname[20];printf(输入要增加的城市:);scanf(%s,name);getchar();if(G-c_n==0){strcpy(G-clist[0].name,name);G-c_n++;}else{for(inti=0;iG-c_n;i++)if(strcmp(G-clist[i].name,name)==0)return-1;elsestrcpy(G-clist[G-c_n].name,name);G-c_n++;}return1;}voidmindistance(Graph*G,intv0,intv1)//最短距离{int*d;intvd,w,i,j,v;intmind,*pred,*finald;finald=(int*)malloc(G-c_n*sizeof(int));//判断顶点是否已求出最短路径d=(int*)malloc(G-c_n*sizeof(int));//储存起始点到各点的最短路径pred=(int*)malloc(G-c_n*sizeof(int));//最后用于输出最短路径for(v=0;vG-c_n;v++){finald[v]=0;d[v]=G-arcs[v0][v].cost;if(d[v]zuida)pred[v]=v0;elsepred[v]=-1;}d[v0]=0;//到起始点无路径finald[v0]=1;//v0放入到final数组里for(i=1;iG-c_n;i++)//从1开始、因为起始点已经在final里面、剩下n-1个顶点、循环n-1次。{mind=zuida;for(w=0;wG-c_n;w++){if(!finald[w])//没有放进final里面的终点进行选择最短路径出来.{if(d[w]mind){mind=d[w];vd=w;}}}//找到最短路径终点G-vexs[v]finald[vd]=1;//放入final中for(w=0;wG-c_n;w++){if(!finald[w]&&(mind+G-arcs[vd][w].distanced[w]))//更新源点到每个终点[w]当前的最短路径.若该终点已在final里面、{//跳出if语句、d[w]=mind+G-arcs[vd][w].distance;pred[w]=vd;}}}if(pred[v1]!=-1){printf(%s到%s,G-clist[v0].name,G-clist[v1].name);printf(最短路程为(公里):%d\t\t,d[v1]);printf(%s,G-clist[v0].name);j=pred[v1];while(j!=v0){printf(--%s,G-clist[j].name);j=pred[j];}printf(--%s\n,G-clist[v1].name);}elseprintf(%s到%s没有信息.\n,G-clist[v0].name,G-clist[v1].name);}voidmincost(Graph*G,intv0,intv1)//算最少花费{int*c;intvc,w,i,j,v;intminc,*prec,*finalc;finalc=(int*)malloc(G-c_n*sizeof(int));//判断顶点是否已求出最短路径c=(int*)malloc(G-c_n*sizeof(int));//储存起始点到各点的最短路径prec=(int*)malloc(G-c_n*sizeof(int));//最后用于输出最短路径for(v=0;vG-c_n;v++){finalc[v]=0;c[v]=G-arcs[v0][v].cost;if(c[v]zuida)prec[v]=v0;elseprec[v]=-1;}c[v0]=0;//到起始点无路径finalc[v0]=1;//v0放入到final数组里for(i=1;iG-c_n;i++)//从1开始、因为起始点已经在final里面、剩下n-1个顶点、循环n-1次。{minc=zuida;for(w=0;wG-c_n;w++){if(!finalc[w])//没有放进final里面的终点进行选择最短路径出来.{if(c[w]minc){minc=c[w];vc=w;}}}//找到最短路径终点G-vexs[v]finalc[vc]=1;//放入final中for(w=0;wG-c_n;w++){if(!finalc[w]&&(minc+G-arcs[vc][w].costc[w]))//更新源点到每个终点[w]当前的最短路径.若该终点已在final里面、{//跳出if语句、c[w]=minc+G-arcs[vc][w].cost;prec[w]=vc;}}}if(prec[v1]!=-1){printf(%s到%s,G-clist[v0].name,G-clist[v1].name);printf(最少花费为(元):%d\t\t,c[v1]);printf(%s,G-clist[v0].name);j=prec[v1];while(j!=v0){printf(--%s,G-clist[j].name);j=prec[j];}printf(--%s\n,G-clist[v1].name);}elseprintf(%s到%s没有信息.\n,G-clist[v0].name,G-clist[v1].name);}voidmintime(Graph*
本文标题:数据结构《交通咨询系统》完整代码
链接地址:https://www.777doc.com/doc-6335496 .html