版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、交通咨询系统设计实验目的和要求1.掌握最短路径的算法;2.编写实验报告;实验内容本设计要求一个交通咨询系统,能让旅客咨询从任一个城市顶点到另一个城市顶点之间的最短路径、最低花费或最少时间等问题。对于不同的咨询要求,可输入城市间的路程、所需时间或所需费用。实验步骤1、问题分析该设计分为三个部分:l建立交通网络图的存储结构l解决单源最短路径问题l实现两个城市顶点之间的最短路径问题2、问题求解l2.1建立交通网络图的存储结构图的邻接矩阵#definemvnum50typedefstructvertextypevexsmvnum;/顶点信息adjmatrixarcsmvnummvnum;/邻接矩阵边的
2、信息mgraphl2.2单源最短路径dijkstra算法按路径长度递增产生诸顶点的最短路径l2.3任意两个顶点之间的最短路径floyd算法3、完整的程序清单4、程序运行测试#includestdafx.h#include#include#definemvnum50#definedij_maxn33#definemax_vertex_num31#definemax_string_num10#definemax_traffic_num10typedefstructtrafficnode1/8charnamemax_string_num;inttime;/intendcity/火车到达城市的编号in
3、tcost;/票价trafficnodedat;typedefstructvnodecitytypecity;/城市编号inttrainnum;/标记下面train数组里元素个数trafficnodedattrainmax_traffic_num;/数组成员为结构体,记录了到达城市、起止时间、票价和班次vnodedat;typedefstructtrafficnodecharnamemax_string_num;/班次inttime;intendcity;/火车到达城市的编号intcost;/票价trafficnodedat;typedefstructvnodecitytypecity;/城市
4、编号intflightnum;/标记下面train数组和flight数组里元素个数trafficnodedatflightmax_traffic_num;vnodedat;intmain()switch(command)case0:return0;case1:administrators();/管理员操作界面函数break;case2:user();/用户操作界面函数break;default:coutt选择序号错误!请重新选择!n;intinitsystem()voiduser()voidadministrators()intdelcity(char*name)/删除城市/删除城市2/8in
5、tcity,i,j;city=seekcity(name);for(i=city;icitynum-1;i+)strcpy(citynamei,citynamei+1);adjlisti.flightnum=adjlisti+1.flightnum;adjlisti.trainnum=adjlisti+1.trainnum;for(j=0;jadjlisti.flightnum;j+)adjlisti.flightj.cost=adjlisti+1.flightj.cost;adjlisti.flightj.endcity=adjlisti+1.flightj.endcity;strcpy(a
6、djlisti.f,adjlisti+1.f);adjlisti.flightj.time=adjlisti+1.flightj.time;citynum-;return1;intdelpath(char*name)/删除路线/删除路线inti,j,flag=0;for(i=0;icitynum;i+)for(j=0;jadjlisti.flightnum;j+)if(strcmp(adjlisti.f,name)=0)flag=1;break;/找到要删除的路线,找到跳出for循环if(flag)for(;jadjlisti.
7、flightnum-1;j+)adjlisti.flightj.cost=adjlisti.flightj+1.cost;adjlisti.flightj.endcity=adjlisti.flightj+1.endcity;strcpy(adjlisti.f,adjlisti.flightj+1.name);adjlisti.flightj.time=adjlisti.flightj+1.time;adjlisti.flightnum-;/将要删除路线后面的路线全部向前移,并将总数减1break;for(j=0;jadjlisti.trainnum;j+)3/8if(s
8、trcmp(adjlisti.t,name)=0)flag=1;break;if(flag)for(;jadjlisti.trainnum-1;j+)adjlisti.trainj.cost=adjlisti.trainj+1.cost;adjlisti.trainj.endcity=adjlisti.trainj+1.endcity;strcpy(adjlisti.t,adjlisti.trainj+1.name);adjlisti.trainj.time=adjlisti.trainj+1.time;adjlisti.trainnum-;break;
9、return1;intinsertcity(char*name)/添加某个城市/添加城市strcpy(citynamecitynum,name);adjlistcitynum.city=citynum;/设置城市编号adjlistcitynum.flightnum=0;adjlistcitynum.trainnum=0;/新增城市火车数和飞机数初始为零citynum+;/城市总数加1return1;intinsertflight(char*flight,char*startcity,char*endcity,inttime,intcost)/添加某架航班/添加飞机路线inti,j;i=seek
10、city(startcity);j=seekcity(endcity);adjlisti.flightadjlisti.flightnum.cost=cost;adjlisti.flightadjlisti.flightnum.endcity=j;adjlisti.flightadjlisti.flightnum.time=time;strcpy(adjlisti.flightadjlisti.flightn,flight);adjlisti.flightnum+;return1;4/8intinserttrain(char*train,char*startcity,char*e
11、ndcity,inttime,intcost)/添加某次列车/添加火车路线inti,j;i=seekcity(startcity);j=seekcity(endcity);adjlisti.trainadjlisti.trainnum.cost=cost;adjlisti.trainadjlisti.trainnum.endcity=j;adjlisti.trainadjlisti.trainnum.time=time;strcpy(adjlisti.trainadjlisti.trainn,train);adjlisti.trainnum+;return1;voiddijkst
12、ra(ints3030,intp_start,intp_end,inttraveltype)intprecity30;inti,j,min,pre,pos;for(i=0;icitynum;i+)precityi=-1;precityp_start=-2;while(precityp_end=-1)min=-1;for(i=0;icitynum;i+)if(precityi!=-1)/i为起始站for(j=0;j0&(min0|sijmin)pre=i;pos=j;/j为起始站中花费最小的到达站的城市编号min=sij;precitypos=pre;dijkstra_output(s,prec
13、ity,p_end,traveltype);intcalcmincost(intstartcity,intendcity,inttraveltype)/查询最小耗费路线ints3030;inti,j,min,end,flag1,flag2;5/8flag1=0;flag2=0;for(i=0;icitynum;i+)for(j=0;jcitynum;j+)sij=-1;/设空路径if(traveltype=0)/判断初始城市和终点城市是否在火车交通路线中for(i=0;icitynum;i+)for(j=0;jadjlisti.trainnum;j+)if(adjlisti.trainj.en
14、dcity=startcity)flag1=1;if(adjlisti.trainj.endcity=endcity)flag2=1;elseif(traveltype=1)/判断初始和终点城市是否在飞机交通路线中for(i=0;icitynum;i+)for(j=0;jadjlisti.flightnum;j+)if(adjlisti.flightj.endcity=startcity)flag1=1;if(adjlisti.flightj.endcity=endcity)flag2=1;if(flag1!=1&flag2!=1)printf(nt抱歉!没有您要查找的路线!);return0
15、;if(traveltype=0)for(i=0;icitynum;i+)min=32767;j=0;while(jadjlisti.trainnum)min=32767;end=adjlisti.trainj.endcity;while(end=adjlisti.trainj.endcity&jadjlisti.trainnum)if(adjlisti.trainj.costmin)min=adjlisti.trainj.cost;j+;/min为i城市中的最小花费,end为其路线终点站6/8siend=min;elsefor(i=0;icitynum;i+)min=32767;j=0;wh
16、ile(jadjlisti.flightnum)min=32767;end=adjlisti.flightj.endcity;while(end=adjlisti.flightj.endcity&jadjlisti.flightnum)if(adjlisti.flightj.costmin)min=adjlisti.flightj.cost;j+;siend=min;dijkstra(s,startcity,endcity,traveltype);return1;/存储数据函数intsavefile()/将火车飞机交通信息写入文件file*fp;inti,j,total;if(fp=fopen
17、(city.txt,wb)=null)coutnt无法打开文件!n;return-1;fprintf(fp,%dn,citynum);/在city文件中输入城市总数for(i=0;icitynum;i+)fprintf(fp,%sn,citynamei);/再输入城市名fclose(fp);total=0;if(fp=fopen(train.txt,wb)=null)7/8coutnt无法打开文件!n;return-1;for(i=0;icitynum;i+)total+=adjlisti.trainnum;fprintf(fp,%dn,total);/在train文件中输入火车总数for(i
18、=0;icitynum;i+)for(j=0;jadjlisti.trainnum;j+)fprintf(fp,%s%s%s,adjlisti.t,citynamei,citynameadjlisti.trainj.endcity);/输入火车车次,始发站和终点站fprintf(fp,%d%dn,adjlisti.trainj.time,adjlisti.trainj.cost);/输入发车时间和到站时间和费用fclose(fp);total=0;if(fp=fopen(flight.txt,wb)=null)coutnt无法打开文件!n;return-1;for(i=0;icitynum;i+)total+=adjlisti.flightnum;fpr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版房地产项目预售合同示范文本4篇
- 2025版台式一体机商场采购合同包含软件安装与培训服务3篇
- 2025年建筑材料堆放场地租赁与供应链管理合同3篇
- 二零二五版民营医院儿科医师及护士劳动合同4篇
- 二零二五年餐饮业短期服务员派遣合同3篇
- 2025年度高科技产品远期交易合同4篇
- 2025年度绿色建筑节能改造合同6篇
- 2025年度数据中心机房租赁与环保责任承诺合同3篇
- 二零二五年度智能门窗系统研发与安装一体化服务合同4篇
- 2025年环保型布草生产与销售一体化合同3篇
- 工业自动化生产线操作手册
- 房地产销售任务及激励制度
- 并购指南(如何发现好公司)
- DL-T-1642-2016环形混凝土电杆用脚扣
- 铜矿成矿作用与地质环境分析
- 30题纪检监察位岗位常见面试问题含HR问题考察点及参考回答
- 询价函模板(非常详尽)
- 《AI营销画布:数字化营销的落地与实战》
- 麻醉药品、精神药品、放射性药品、医疗用毒性药品及药品类易制毒化学品等特殊管理药品的使用与管理规章制度
- 乘务培训4有限时间水上迫降
- 2023年低年级写话教学评语方法(五篇)
评论
0/150
提交评论