欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    北京理工大学数据结构课程设计专题报告图公交线路查询.docx

    • 资源ID:9379485       资源大小:320.33KB        全文页数:35页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    北京理工大学数据结构课程设计专题报告图公交线路查询.docx

    1、北京理工大学数据结构课程设计专题报告图公交线路查询专题设计(图)报告题目:公交线路查询小组成员:问题描述当一个用户从甲地到乙地时,由于不同需求,就有不同的交通方式及不同的交通路线。有人希望以最快速度到达,有人希望以最短距离到达,有人希望用最少的费用等。交通方式有公交车和地铁。编写一北京公交线路查询系统,通过输入起始站、终点站,为用户提供三种或以上决策的交通咨询。设计要求a. 提供对交通线路进行编辑功能。要求可添加或删除线路。b. 提供两种交通工具,公交车和地铁,设定路程所需要的时间、距离及费用等参数。c. 提供多种决策:最短距离、最快到达、最少费用、最少换乘次数等。d. 中途不考虑等候、拥堵等

    2、消耗时间。e. 该系统以人机对话方式进行。用户输入起始站、终点站及需求原则,系统输出乘车方案:乘什么车、乘几路车、距离、时间、费用换乘方法等相关信息。数据结构本程序运用了关于图这种数据结构。它的抽象数据类型定义如下:typedef struct unDiGraph int numVerts; /结点 costAdj cost; /邻接矩阵unDiGraph,*UNG;基本操作:unDiGraph* CreateCostG()操作结果:构造带权(费用)图。unDiGraph* CreateTimeG()操作结果:构造带权(时间)图。构造地铁带权(费用)图。PathMat *Floyed(unDi

    3、Graph *D)操作结果:Floyed函数 求任意两点的最短路径。设计与实现算法思路(1) 数据存储。站点信息(站点代码)、交通信息(站点间的里程、公交和地铁时刻)存储于磁盘文件。建议把站点信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。(2) 数据的逻辑结构。根据设计任务的描述,其站点间的交通问题是典型的图结构,可看作为有向图,图的顶点是站点,边是站点之间所耗费的时间(要包括中转站的等候时间)或车费。(3) 数据的存储结构。采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。这里建议采用邻接表作为数据的存储结构。(

    4、4) 用不同的功能模块对站点信息和交通信息进行编辑。添加、修改、删除功能可用菜单方式或命令提示方式。只要能方便的对站点信息和交通信息进行管理即可。(5) 最优决策功能模块(fast or province)。 读入信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放站点名及对方站点到达该元素所代表站点的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的站点有交通联系的站点(代码、里程、公交和地铁车次)。 根据具体最优决策的要求,用Dijkstra算法求出出发站点到其它各站点的最优值(最短时间或最小的费用),搜索过程中所经过站点的局部最优信息都保存在邻接表的表头数组中。其目的站点

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

    6、;最终所需的最快需要多长时间才能到达及费用,或者最少需要多少车费才能到达及时间。(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。算法思想 本程序运用了图的知识里程时间A-B88B-C55C-K67K-L11L-J67J-M66C-D55D-M55D-E44E-M1111E-H66E-F99F-A99F-G66G-I22E-H66并利用Floyed函数求带权图两点之间的最短路径。通过对图表求最短路径,就可以最短道从一站点到另一站点之间最省时间和最省费用的走法。程序模块程序的模块为#include #include #include #i

    7、nclude #include #include /引用的文本件#define INF 65535 /定义一个最大数定为无穷值#define MAX 13typedef int costAdjMAX+1MAX+1;/图邻接矩阵从1开始记数int PathMAX+1MAX+1;/图邻接矩阵从1开始记数int o13,h;typedef struct unDiGraph int numVerts; /结点 costAdj cost; /邻接矩阵unDiGraph,*UNG; /图的定义costAdj B,L;void pr(int i)/选择城市void pri()/输出城市unDiGraph *

    8、CreateCostG()/构造带权(费用)图 返回首地址G:unDiGraph *CreateTimeG()/构造带权(时间)图 返回首地址G:unDiGraph *CreateFlyG()/飞机的相关信息void Floyed(unDiGraph *D,unDiGraph *M) /Floyed函数 求任意两点的最短路径:void prn_pass(int i,int j) /为了求从i到j的最短路径,只需要调用如下的过程void time()/求最少时间路径。void money()/求最少花费路径void administrator()/管理员功能void main()/main函数测

    9、试与结论显示站点选择最短时间路线 选择最少花费路线增加站点并测试总结与思考拿到题目的时候比较困惑,毕竟我们的C/C+学的不是很好,后来看了很多有关的例子,仔细看了书上的图部分的知识,觉得就是书上的许许多多的内容和代码,其实总体来说,应该不会特别的难。后来,参照书上的和网上的诸多例子,一个模块一个模块的编写,调试,一个功能一个功能去完善。发现越做越顺利,又有以前用C/C+写的各个程序的代码,回头看了一下自己当年编写的程序,加上实验中对于改错的经验积累和几个学得不错的同学的帮助,我们小组的程序中的错误也一个一个的顺利解决。其实,这个对于文本文件的操作以前也有涉及到过,但是以前的时候总是以数组或者指

    10、针的形式进行调用,这一次直接才有的是I/O流,觉得效果还是很不错的。再后来,程序终于就基本实现了。其实,从这次实验中我们认识到,编程有很多的乐趣也有很多的技巧性和知识性。我们将在以后的日子里继续认真的学习知识,积累经验,让自己的编程能力提高。附录程序源代码#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=0,t=0;typedef struct zh

    11、u 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_edit char a10;c_edit;c_edit add10;costAdj B,L;int pr(int

    12、 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) : coutA ;break; case(2) : coutB ;break; case(3) : coutC ;break; case(4) : coutD ;break; case(5) : coutE ;break; case(6) : coutF ;break; case(7) : coutG ;break; case(8) : coutH ;break; case(9) :

    13、coutI ;break; case(10) : coutJ ;break; case(11) : coutK ;break; case(12) : coutL ;break; case(13) : coutM ;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); coutendl *endlendlendlendlendlendl;/构造带权(费用)

    14、图 返回首地址G:unDiGraph *CreateCostG(int o)/公交的花费的存贮和编辑功能 unDiGraph *G; int i,j; int a=0,b=0,f,h=1; if(!(G=(unDiGraph *)malloc(sizeof(unDiGraph)return(NULL); /为G分配存储空间。 for(i=1;ic_number+1;i+) for(j=1;jcostij=INF; /初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cost61=9; G-cost12=G-cost21=8; G-cost23=G

    15、-cost32=5; G-cost34=G-cost43=5; G-cost45=G-cost54=4; G-cost56=G-cost65=9; G-cost58=G-cost85=6; G-cost57=G-cost75=6; G-cost67=G-cost76=6; G-cost79=G-cost97=2; G-cost311=G-cost113=6; G-cost1112=G-cost1211=1; G-cost1210=G-cost1012=7; G-cost310=G-cost103=3; G-cost1310=G-cost1013=5; G-cost135=G-cost513=1

    16、1; 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; cout1:继续更改站点费用endl; cout0:返回上一级菜单endl; cout*h; switch(h) case 1: h=1;break; case 0: h=0;break; default:cout选择出错costnv.c_costxv.c_cost=mv.c_co

    17、st; 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) return(NULL); /为G分配存储空间。 for(i=1;ic_number+1;i+) for(j=1;jcostij=INF;/初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cost61=9; G-c

    18、ost12=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-cost1210=G-cost1012=6; G-cost310=G-cost103=3; G-cost1310=G-cost1

    19、013=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; switch(h) case 1: h=1;break; case 0: h=0;break; default:cout选择出错co

    20、stnz.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) return(NULL); /为G分配存储空间。 for(i=1;ic_number+1;i+) for(j=1;jcostij=INF;/初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cos

    21、t61=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-cost1211=1; G-cost1210=G-cost1012=2; G-cost310=G-cost103=3; G-cost13

    22、10=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; cout*h; switch(h) case 1: h=1;break; case 0: h=0;break; default:c

    23、out选择出错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) return(NULL); /为G分配存储空间。 for(i=1;ic_number+1;i+) for(j=1;jcostij=INF; /初始化使G-costij为无穷。 G-numVerts=c_number; G-cost16=G-cost61=9; G-cost12=G-cost21=7; G-cost23=G-cost32=5; G-cost34=G-cost43=5; G-cost45=G-cost54=4; G-cost56=G-cost65=9; G-cos


    注意事项

    本文(北京理工大学数据结构课程设计专题报告图公交线路查询.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开