交通咨询系统设计_第1页
交通咨询系统设计_第2页
交通咨询系统设计_第3页
交通咨询系统设计_第4页
交通咨询系统设计_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#/8交通咨询系统设计实验目的和要求掌握最短路径的算法;编写实验报告;实验内容本设计要求一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一个城市顶点之间的最短路径、最低花费或最少时间等问题。对于不同的咨询要求,可输入城市间的路程、所需时间或所需费用。实验步骤问题分析该设计分为三个部分:建立交通网络图的存储结构解决单源最短路径问题实现两个城市顶点之间的最短路径问题问题求解2.1建立交通网络图的存储结构图的邻接矩阵defineMVNum50Typedefstruct{VertexTypevexs[MVNum];//顶点信息Adjmatrix arcs[MVNum][MVNum];//邻接矩阵边的信息}MGraph2.2单源最短路径Dijkstra算法按路径长度递增产生诸顶点的最短路径2.3任意两个顶点之间的最短路径Floyd算法完整的程序清单程序运行测试typedefstructTrafficNode{charname[MAX_STRING_NUM];intTime;//intEndCity//火车到达城市的编号intCost;//票价}TrafficNodeDat;typedefstructVNode{CityTypecity;//城市编号intTrainNum;〃标记下面 Train数组里元素个数TrafficNodeDatTrain[MAX_TRAFFIC_NUM];//数组成员为结构体,记录了到达城市、起止时间、票价和班次}VNodeDat;typedefstructTrafficNode{charname[MAX_STRING_NUM];//班次intTime;intEndCity;//火车到达城市的编号intCost;//票价}TrafficNodeDat;typedefstructVNode{CityTypecity;//城市编号intFlightNum;〃标记下面 Train数组和Flight数组里元素个数TrafficNodeDatFlight[MAX_TRAFFIC_NUM];}VNodeDat;管理员操作界面函数break;case2:用户操作界面函数break;default:选择序号错误请重新选择intInitSystem()voidUser()voidAdministrators()〃删除城市{//删除城市/删除路线总数减〃删除路线找到要删除的路线,找到跳出 循环将要删除路线后面的路线全部向前移,并将//添加某个城市{/添/加城市设置城市编号AdjList[Cit/Num].FlightNum=0;新增城市火车数和飞机数初始为零城市总数加return1;}//添加某架航班{/添/加飞机路线//添加某次列车{/添/加火车路线voidDijkstra(ints[30][30],intp_start,intp_end,intTravelType){intPreCity[30];inti,j,min,pre,pos;for(i=0;i<CityNum;i++)PreCity[i]=-1;PreCity[p_start]=-2;while(PreCity[p_end]==-1){min=-1;for(i=0;i<CityNum;i++)if(PreCity[i]!=-1)//i为起始站{for(j=0;j<CityNum;j++)if(PreCity[j]==-1&&s[i][j]>0&&(min<0||s[i][j]<min)){pre二i;pos=j;//j为起始站中花费最小的到达站的城市编号min=s[i][j];}}PreCity[pos]=pre;}Dijkstra_Output(s,PreCity,p_end,TravelType);}intCalcMinCost(intStartCity,intEndCity,intTravelType){//查询最小耗费路线ints[30][30];inti,j,min,end,flag1,flag2;

flag1=0;flag2=0;for(i=0;i<CityNum;i++)for(j=0;j<CityNum;j++)s[i][j]=-1;//设空路径if(TravelType==0)//判断初始城市和终点城市是否在火车交通路线中for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].TrainNum;j++){if(AdjList[i].Train[j].EndCity==StartCity)flag1=1;if(AdjList[i].Train[j].EndCity==EndCity)flag2=1;}elseif(TravelType==1)//判断初始和终点城市是否在飞机交通路线中for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].FlightNum;j++){if(AdjList[i].Flight[j].EndCity==StartCity)flag1=1;if(AdjList[i].Flight[j].EndCity==EndCity)flag2=1;}if(flag1!=1&&flag2!=1){printf("\n\t抱歉!没有您要查找的路线!");return0;}if(TravelType==0){for(i=0;i<CityNum;i++){min=32767;j=0;while(j<AdjList[i].TrainNum){min=32767;end=AdjList[i].Train[j].EndCity;while(end==AdjList[i].Train[j].EndCity&&j<AdjList[i].TrainNum){if(AdjList[i].Train[j].Cost<min)min=AdjList[i].Train[j].Cost;j++;end}//min为i城市中的最小花费,end为其路线终点站s[i][end]=min;}}else{for(i=0;i<CityNum;i++){min=32767;j=0;while(j<AdjList[i].FlightNum){min=32767;end=AdjList[i].Flight[j].EndCity;while(end==AdjList[i].Flight[j].EndCity&&j<AdjList[i].FlightNum){if(AdjList[i].Flight[j].Cost<min)min=AdjList[i].Flight[j].Cost;j++;}s[i][end]=min;}}}Dijkstra(s,StartCity,EndCity,TravelType);return1;}//存储数据函数intSaveFile()///////////////////////////////////////////////////////////////{//将火车飞机交通信息写入文件FILE*fp;inti,j,total;if((fp=fopen("city.txt","wb"))==NULL){cout<<"\n\t无法打开文件!\n";return-1;}fprintf(fp,"%d\n",CityNum);//在city文件中输入城市总数for(i=0;i<CityNum;i++)fprintf(fp,"%s\n",CityName[i]);//再输入城市名fclose(fp);total=0;if((fp=fopen("train.txt","wb"))==NULL){

cout<<"\n\t无法打开文件cout<<"\n\t无法打开文件!\n";return-1;}for(i=0;i<CityNum;i++)total+=AdjList[i].TrainNum;fprintf(fp,"%d\n",total);//在train文件中输入火车总数for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].TrainNum;j++){fprintf(fp,"%s%s%s",AdjList[i].Train[j].name,CityName[i],CityName[AdjList[i].Train[j].EndCity]);//输入火车车次,始发站和终点站fprintf(fp,"%d%d\n",AdjList[i].Train[j].Time,AdjList[i].Train[j].Cost);//输入发车时间和到站时间和费用}fclose(fp);total=0;if((fp=fopen("flight.txt","wb"))==NULL){cout<<"\n\t无法打开文件!\n";return-1;}for(i=0;i<CityNum;i++)total+=AdjList[i].FlightNum;fprintf(fp,"%d\n",total);//在flight文件中输入飞机总数for(i=0;i<CityNum;i++)for(j=0;j<AdjList[i].FlightNum;j++){fprintf(fp,"%s%s%s",Ad

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论