1、全程只考虑一种交通工具,不考虑回程;(4) 旅途中耗费的总时间应该包括中转站的等候时间。(5) 咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具 , 输出信息 : 最快需要多长时间才能到达或者最少需要多少旅费才能到达。1.4 其他需求(1)具有可靠性,可用性。(2)简单,便捷。(3)清晰,易懂。2 概要设计采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。划分出来的模块相对独立但又相关,且容易理解。 图1 模块1图1.模块1图2.模块2(1) 数据存储。城市信息、交通信息存储于磁盘文件。(2) 数据的逻辑结构。
2、根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间或旅费。(3) 数据的存储结构。这里建议采用邻接表作为数据的存储结构。(4) 用不同的功能模块对城市信息和交通信息进行编辑。(5) 最优决策功能模块。 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市。 根据具体最优决策的要求,用Dijkstra算法求出出发城市到其它各城市的最优值,搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其
3、目的城市所代表的元素中就保存了所需的最优决策结果。 输出结果。从目的城市出发,搜索到出发城市,所经过的城市均入栈,再逐一出栈栈中的城市,输出保存在表头数组中对应城市的信息及最终结果。即最终所需的最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间。(6) 主程序可以有系统界面、菜单;在程序运行过程中可以反复操作。3 详细设计3.1 结构体的定义本程序运用了关于图这种数据结构。他的抽象数据类型定义如下:typedef struct unDiGraph int numVerts; /结点 costAdj cost; /邻接矩阵unDiGraph,*UNG;基本操作:unDiGraph
4、* CreateCostG()操作结果:构造带权(费用)图。unDiGraph* CreateTimeG()构造带权(时间)图。PathMat *Floyed(unDiGraph *D)Floyed函数 求任意两点的最短路径。3.2基本操作 /图的定义costAdj B,L;void pr(int i)/选择城市void pri()/输出城市unDiGraph *CreateCostG()构造带权(费用)图 返回首地址G:unDiGraph *CreateTimeG()构造带权(时间)图 返回首地址G:unDiGraph *CreateFlyG()飞机的相关信息void Floyed(unDi
5、Graph *D,unDiGraph *M) 操作要求:图G存在Floyed函数 求任意两点的最短路径void prn_pass(int i,int j) /为了求从i到j的最短路径,只需要调用如下的过程void time()求最少时间路径。void money()求最少花费路径void administrator()管理员功能void main()/main函数3.3 算法说明利用Floyed函数求带权图两点之间的最短路径。通过对带权费用图和带权时间图求最短路径,就可以最短道从一城市到另一城市之间最省时间和最省费用的走法3.3.1主函数流程图 图3.主函数流程图3.3.2 pri函数流程图
6、图4 pri函数流程图3.3.3 增加城市流程图图5 增加城市函数流程图4 系统实现本节介绍了系统实现的开发环境,包括硬件环境,软件环境,以及运行界面展示。最后显示了该系统实现后每个功能的实现结果4.1开发环境1.硬件环境电脑型号: 组装机.处理器: Pentium G630 2.7GHz主板: 技嘉H61mds2内存: 4G显卡: HD Graphics Family2.软件环境 操作系统:Windows XP. 开发软件:Microsoft Visual C+ 6.0.4.2运行界面 图6 主菜单界面 图7 查看城市 图8 石家庄到北京火车 图9 石家庄到北京飞机 图10 管理员界面 图1
7、1 飞机花费编辑4.3测试用例时间的最少花费和最短时间的铁路乘车路线。例如:在最短时间路线选择时,如果输入11(北京)和8(广州),系统就会自动给出最短路径为:北京 郑州 武汉 株洲 广州。 当输入出错时,系统会提示出错信息,并返回输入窗口让用户重新输入。5. 总 结.构造带权图CreateFlyG CreateCostG和CreateTimeG:T(MAX)=O(MAX)2) 通过实习让我了解到任何事情只有努力之后才能完成的更好。6.参 考 文 献 1 许卓群等,数据结构,高等教育出版社,2000年2 刘坤起.张有华.数据结构题型.题集.题解M.科学出版社 2005年11月附录.源程序#in
8、clude stdio.hcrtdbg.hstring.h#includemalloc.h#define INF 65535 /定义一个最大数定为无穷值#define MAX 23static int c_number=14;static int k=0;static int v=0,z=0,r=0,t=0;typedef struct zhu int c_cost; int c_time; int f_cost; int f_time;zhu;zhu m20,x20,n20;typedef int costAdjMAX+1MAX+1;/图邻接矩阵从1开始记数int PathMAX+1MAX+
9、1;typedef struct c_editchar a10;c_edit;c_edit add10;int pr(int i,int j) int h=0; if (j=0) h=i;else if (j=1) cinaddi.a;switch(h)/运用switch语句。 case(0):cout; break; case(1) : cout成都 case(2) :西安 break; case(3) :郑州 case(4) :武汉 case(5) :株洲 case(6) :贵阳 case(7) :柳州 case(8) :广州 case(9) :南宁 case(10) :徐州 case(1
10、1) :北京 case(12) :天津 case(13) :上海 case(14) :石家庄 default: coutaddi-14.a; return 1;/输出城市列表及相应代码void pri() int i; 城市及其代码endlendl; * for (i=1;i=c_number;i+) . pr(i,0); /构造带权(费用)图 返回首地址G:unDiGraph *CreateCostG(int o)/火车的花费的存贮和编辑功能 unDiGraph *G; int i,j; int a=0,b=0,f,h=1; if(!(G=(unDiGraph *)malloc(sizeof
11、(unDiGraph) /为G分配存储空间。 return(NULL); for(i=1;c_number+1; for(j=1;jcostij=INF; /初始化使G-costij为无穷。 G-numVerts=c_number;cost16=G-cost61=96;cost12=G-cost21=84;cost23=G-cost32=51;cost34=G-cost43=53;cost45=G-cost54=40;cost56=G-cost65=90;cost58=G-cost85=67;cost57=G-cost75=67;cost67=G-cost76=60;cost79=G-cost
12、97=25;cost311=G-cost113=69;cost1112=G-cost1211=13;cost1210=G-cost1012=67;cost310=G-cost103=34;cost1310=G-cost1013=65;cost135=G-cost513=118;cost1411=G-cost1114=43;cost142=G-cost214=110;cost143=G-cost314=60; if (o) while(h=1) v=v+1; pri(); couta;请输入结尾城市的代码b;请输入你的两地花费mv.c_cost; nv.c_cost=a; xv.c_cost=b
13、;请选择*1:继续更改城市费用0:返回上一级菜单h; switch(h) case 1: h=1; break; case 0: h=0; default: coutcost61=9;cost21=8;cost32=5;cost43=5;cost54=4;cost65=9;cost75=6;cost85=6;cost76=6;cost97=2;cost113=6;cost1211=1;cost1012=6;cost103=3;cost1013=6;cost513=11;cost1114=3;cost214=7;cost314=3; if (o) z=z+1;火车时间编辑请输入你的两地时间mz.
14、c_time; nz.c_time=a; xz.c_time=b;继续更改城市时间f=z+1;while (z-) costnz.c_timexz.c_time=mz.c_time;z=f;unDiGraph *CreateTimeF(int o)/飞机的时间的存贮和编辑功能cost61=3;cost21=2;cost32=1;cost43=2;cost65=3;cost1012=2;cost513=4;cost1114=1;cost214=3;cost314=1; t=t+1;飞机时间编辑mt.f_time; nt.f_time=a; xt.f_time=b;f=t+1;while (t-) costnt.f_timex
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1