ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:84.64KB ,
资源ID:8556399      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8556399.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(31070069课程设计报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

31070069课程设计报告.docx

1、31070069课程设计报告课程设计报告课程名称: 数据结构 题目名称:全国交通咨询模拟 学生学院: 专业班级: 学 号: 学生姓名: 2009 年 6 月 24 日全国交通咨询模拟 一、设计目的掌握线性表、栈、图结构和对文件的操作,学习屏幕编辑和菜单技术,掌握用最短路径及其搜索算法编制较综合性的程序,能用图的邻接存储结构求解最优路线问题,解决有关实际问题。得到软件设计技能的训练。二、问题描述交通咨询模拟。根据旅客的不同需要,要考虑到旅客希望在旅途中的时间尽可能短、希望旅费尽可能省等的要求。旅途用火车或飞机作为交通工具。用计算机编制程序,为旅客提供两种最优决策的交通咨询系统。三、基本要求1、对

2、城市信息(城市名、城市间的里程)进行编辑:具备添加、修改、删除功能;2、对城市间的两种交通工具:飞机和火车。对飞机航班和列车时刻表进行编辑:里程、航班和列车班次的添加、修改、删除;3、提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具,可以不考虑回程;4、旅途中的耗费的总时间应包括中转站的等候时间。其中飞机至少二小时,火车至少一小时;5、咨询以用户和计算机对话方式进行,要注意人机交互的屏幕界面。由用户选择最优决策原则和交通工具,输入起始站、终点站、出发时间,输出信息:最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间,并详细说明依次于何时何地乘坐哪一趟班机或列车何时

3、到达何地。四、实现提示1、算法思路(1) 数据存储。城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。(2) 数据的逻辑结构。根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。(3) 数据的存储结构。采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。这里建议采用邻接表作为数据的存储结构。(4) 用不同的功能模块对城市信息和交通信

4、息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面,具体实现由学生自行设计,也可参考有关程序(届时在网上提供)。这些工作有不小的工作量。(5) 最优决策功能模块(fast or province)。 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市(代码、里程、航班、列车车次)。 根据具体最优决策的要求,用Dijkstra算法求出出发城市到其它各城市的最优值(最短时间或最小的费用),搜索过

5、程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其目的城市所代表的元素中就保存了所需的最优决策结果。这过程中,要用队列或栈保存局部最优决策值(局部最短的时间或最省的费用)变小的城市,其相应的初始值可为,并在表头数组对应的城市元素中保存响应的信息。开始时,栈(队)中只有出发地城市,随着对栈(队)顶(首)城市有交通联系的城市求得决策值(最短时间或最小的费用),若该值是局部最优值且该城市不在栈(队)中,则进栈(队),直至栈(队)为空。 输出结果。从目的城市出发,搜索到出发城市,所经过的城市均入栈,再逐一出栈栈中的城市,输出保存在表头数组中对应城市的信息(对方城市的出发信息,里程、时间、费用等

6、)及最终结果。即输出依次于何时何地乘坐几点的飞机或火车于何时到达何地;最终所需的最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间。(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。2、数据结构本程序运用了关于图这种数据结构。他的抽象数据类型定义如下:typedef struct unDiGraph int numVerts; /结点 costAdj cost; /邻接矩阵unDiGraph,*UNG;基本操作:unDiGraph* CreateCostG()操作结果:构造带权(费用)图。unDiGraph* Creat

7、eTimeG()操作结果:构造带权(时间)图。构造飞机带权(费用)图。PathMat *Floyed(unDiGraph *D)操作结果:Floyed函数 求任意两点的最短路径。3、算法思想 本程序运用了图的知识,构造了无向带权费用图和无向带权时间图。(如图1,图2所示) 图1. 十三城市之间火车费用表(权值表示费用) 图2. 十三城市之间火车行驶时间表 (权值表示时间)并利用Floyed函数求带权图两点之间的最短路径。通过对带权费用图和带权时间图求最短路径,就可以最短道从一城市到另一城市之间最省时间和最省费用的走法。 为了简洁直观,本设计对课本内的交通网进行了简化,原来的25个城市缩减为13

8、个。但是基本实现了设计的目的。满足了基本要求。4、程序模块1 程序是用dos 版做的界面。2 主界面包括1.选择火车最短时间路线 2.选择火车最节约费用路线3.选择坐飞机 4.管理员程序确 5.退出本程序3 程序的模块为#include #include #include #include #include #include /引用的文本件#define INF 65535 /定义一个最大数定为无穷值#define MAX 13typedef int costAdjMAX+1MAX+1;/图邻接矩阵从1开始记数int PathMAX+1MAX+1;/图邻接矩阵从1开始记数int o13,h;t

9、ypedef struct unDiGraph int numVerts; /结点 costAdj cost; /邻接矩阵unDiGraph,*UNG; /图的定义costAdj B,L;void pr(int i)/选择城市void pri()/输出城市unDiGraph *CreateCostG()/构造带权(费用)图 返回首地址G:unDiGraph *CreateTimeG()/构造带权(时间)图 返回首地址G:unDiGraph *CreateFlyG()/飞机的相关信息void Floyed(unDiGraph *D,unDiGraph *M) /Floyed函数 求任意两点的最短

10、路径:void prn_pass(int i,int j) /为了求从i到j的最短路径,只需要调用如下的过程void time()/求最少时间路径。void money()/求最少花费路径void administrator()/管理员功能void main()/main函数五、主程序#include #include #include #include #include #include #define INF 65535 /定义一个最大数定为无穷值#define MAX 23static int c_number=13;static int k=0;static int v=0,z=0,r

11、=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+1;/图邻接矩阵从1开始记数typedef struct unDiGraph int numVerts; /结点 costAdj cost; /邻接矩阵unDiGraph,*UNG; /图的定义typedef struct c_editchar a10;c_edit;c_edit add10;c

12、ostAdj B,L;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成都 ; break; case(2) : cout西安 ; break; case(3) : cout郑州 ; break; case(4) : cout武汉 ; break; case(5) : cout株洲 ; break; case(6) : cout贵阳 ; break; case(7) : cout柳州 ; break

13、; case(8) : cout广州 ; break; case(9) : cout南宁 ; break; case(10) : cout徐州 ; break; case(11) : cout北京 ; break; case(12) : cout天津 ; break; case(13) : cout上海 ; break; default: coutaddi-13.a; return 1;/输出城市列表及相应代码void pri() int i; cout 城市及其代码endlendlendl; cout *endl; for (i=1;i=c_number;i+) couti.; pr(i,0

14、); coutendl *endl;coutendlendl;/构造带权(费用)图 返回首地址G:unDiGraph *CreateCostG(int o)/火车的花费的存贮和编辑功能 unDiGraph *G; int i,j; int a=0,b=0,f,h=1; if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph) /为G分配存储空间。 return(NULL); for(i=1;ic_number+1;i+) for(j=1;jcostij=INF; /初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-

15、cost61=96; G-cost12=G-cost21=84; G-cost23=G-cost32=51; G-cost34=G-cost43=53; G-cost45=G-cost54=40; G-cost56=G-cost65=90; G-cost58=G-cost85=67; G-cost57=G-cost75=67; G-cost67=G-cost76=60; G-cost79=G-cost97=25; G-cost311=G-cost113=69; G-cost1112=G-cost1211=13; G-cost1210=G-cost1012=67; G-cost310=G-cos

16、t103=34; G-cost1310=G-cost1013=65; G-cost135=G-cost513=118; if (o) while(h=1) v=v+1; pri(); cout火车花费编辑endl; cout请输入开始城市的代码a; cout请输入结尾城市的代码b; cout请输入你的两地花费mv.c_cost; nv.c_cost=a; xv.c_cost=b; cout请选择endl; cout*endl; cout 1:继续更改城市费用endl; cout 0: 返回上一级菜单 endl; cout*h; switch(h) case 1: h=1; break; cas

17、e 0: h=0; break; default: cout选择出错costnv.c_costxv.c_cost=mv.c_cost;v=f; return(G);/构造带权(时间)图 返回首地址G:unDiGraph *CreateTimeG(int o)/火车的时间的存贮和编辑功能 unDiGraph *G; int i,j; int a=0,b=0,f,h=1; if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph) /为G分配存储空间。 return(NULL); for(i=1;ic_number+1;i+) for(j=1;jcostij=INF;

18、/初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cost61=9; G-cost12=G-cost21=8; G-cost23=G-cost32=5; G-cost34=G-cost43=5; G-cost45=G-cost54=4; G-cost56=G-cost65=9; G-cost57=G-cost75=6; G-cost58=G-cost85=6; G-cost67=G-cost76=6; G-cost79=G-cost97=2; G-cost311=G-cost113=6; G-cost1112=G-cost1211=1; G-c

19、ost1210=G-cost1012=6; G-cost310=G-cost103=3; G-cost1310=G-cost1013=6; G-cost135=G-cost513=11; if (o) while(h=1) z=z+1; pri(); cout火车时间编辑endl; cout请输入开始城市的代码a; cout请输入结尾城市的代码b; cout请输入你的两地时间mz.c_time; nz.c_time=a; xz.c_time=b; cout请选择endl; cout*endl; cout1:继续更改城市时间endl; cout0:返回上一级菜单endl; cout*h; swi

20、tch(h) case 1: h=1; break; case 0: h=0; break; default: cout选择出错costnz.c_timexz.c_time=mz.c_time;z=f; return(G);unDiGraph *CreateTimeF(int o)/飞机的时间的存贮和编辑功能 unDiGraph *G; int i,j; int a=0,b=0,f,h=1; if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph) /为G分配存储空间。 return(NULL); for(i=1;ic_number+1;i+) for(j=1;

21、jcostij=INF;/初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cost61=3; G-cost12=G-cost21=2; G-cost23=G-cost32=1; G-cost34=G-cost43=2; G-cost45=G-cost54=4; G-cost56=G-cost65=3; G-cost57=G-cost75=6; G-cost58=G-cost85=6; G-cost67=G-cost76=6; G-cost79=G-cost97=2; G-cost311=G-cost113=6; G-cost1112=G-cos

22、t1211=1; G-cost1210=G-cost1012=2; G-cost310=G-cost103=3; G-cost1310=G-cost1013=6; G-cost135=G-cost513=1; if (o) while(h=1) t=t+1; pri(); cout飞机时间编辑endl; cout请输入开始城市的代码a; cout请输入结尾城市的代码b; cout请输入你的两地时间mt.f_time; nt.f_time=a; xt.f_time=b; cout请选择endl; cout*endl; cout1:继续更改城市时间endl; cout0:返回上一级菜单endl;

23、cout*h; switch(h) case 1: h=1; break; case 0: h=0; break; default: cout选择出错costnt.f_timext.f_time=mt.f_time;t=f; return(G);unDiGraph *CreateCostF(int o)/飞机花费的存贮和编辑功能 unDiGraph *G; int i,j; int a=0,b=0,f,h=1; if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph) /为G分配存储空间。 return(NULL); for(i=1;ic_number+1;i+) for(j=1;jcostij=INF; /初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cost61=960; G-cost12=G-cost21=840; G-cost23=G-cost32=501; G-cost34=G-co

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1