数据结构课程实践报告城市道路交通_第1页
数据结构课程实践报告城市道路交通_第2页
数据结构课程实践报告城市道路交通_第3页
数据结构课程实践报告城市道路交通_第4页
数据结构课程实践报告城市道路交通_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、哈尔滨理工大学管理学院 数据结构课程设计实验题目:交通咨询系统设计 学 院: 专 业: 信息管理与信息系统 班 级: 11-2班 姓 名: 学 号: 11060402 完成时间:2013年6月28日 指导老师: 数据结构实验项目任务书实验题目交通咨询系统设计学院管理学院专业信管专业年级11-2班任务描述: 综合运用c+编程技术和dijkstra算法和floyd算法,用vs2010或qt等设计建立一个交通咨询系统,实现解决一个简单的城市之间最短路径问题,求一个城市到所有城市的最短路径,及任意的两个城市之间的最短路径。最后提交完整的设计报告和软件程序拷贝。设计要求:1.编写系统帮助旅客咨询从一个城

2、市顶点到另一个城市顶点之间的最短路径(里程)。2.用户可以根据需要指定一个源点,软件需计算出该源点到其他剩余节点之间的最短距离和详细路径。3.用户可以直接查看所有城市之间的最短距离。参考资料:p 课程设计实验教材 p 数据结构( c 语言版),严蔚敏,吴伟民编著,清华大学出版社,2007年第1版 任务下达日期 2013 年6 月 24 日完成日期2013年 6 月 28日 目 录第一章:问题描述4第二章:算法设计42.1算法设计分析42.2模块图42.2.2迪杰斯特拉算法52.2.3费洛伊德算法5三 关键代码描述63.1完整的程序代码63.2代码改写9四、运行结果截图展示14五、实验心得15

3、第一章:问题描述 在交通网络发达,交通工具和交通方式不断更新的今天,人们在出差,旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需要的时间等问题更感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,并利用计算机建立一个交通咨询系统。 设计实现一个简单的城市之间最短路径管理咨询系统,能够模拟实现以下功能:1.帮助旅行者了解从一个城市到另一个城市之间的最短路径。2.用户可以根据需要指定一个源点,软件需计算出该源点到其他剩余节点之间的最短距离和详细路径。3.用户可以直接查看所有城市之间的最短距离。 第二章:算法设计2.1算法设计分析该设计共分三个部分:一是建立交通网络图的存

4、储结构;二是解决单源最短路径问题;三是实现两个城市顶点之间的最短路径问题。 其中,单源最短路径,需要用到迪杰斯特拉(dijkstra)算法(即迪杰斯特拉提出按路径长度递增产生各定点的最短路径算法)。 任意一对顶点间的最短路径,可以依次把有向网络图中的每个顶点作为源点,重复执行前面讨论过的迪杰斯特拉算法n次,即可求得每对之间的最短路径。这里用另一种算法,费洛依德(floyd)算法求得。 交通咨询系统 用户查询(建立有向的存储结构)单源最短路任意一对顶点最短路径2.2模块图2.2.1功能的实现 42.2.2迪杰斯特拉算法2.2.3费洛伊德算法3 关键代码描述3.1完整的程序代码/主控程序 #inc

5、lude#include#define mvnum 100 /最大顶点数#define maxint 32767typedef char vertextype;typedef int adjmatrix;typedef enum false,true boolean; /定义布尔型typedef structvertextype vexsmvnum; /顶点数组,类型假定为char型adjmatrix arcsmvnummvnum; /邻接矩阵,假定为int型mgraph;int dlmvnum,p1mvnum;int dmvnummvnum,pmvnummvnum;#includesave.

6、c#includedijkstra.c#includefloyd.cvoid main( ) mgraph g; int n,e,v,w,k; int xz=1; printf(输入图中顶点个数和边数n,e: ); scanf(%d,%d,&n,&e); createmgraph(&g,n,e); /建立图的存储结构 while (xz!=0) printf(*求城市之间的最短路径*n); printf(=n); printf(1.求一个城市到所有城市的最短路径n); printf(2.求任意的两个城市之间的最短路径n); printf( 0.退出程序 n); printf(=n); prin

7、tf( 请选择: 1或2,或 0 :); scanf(%d,&xz); if(xz=2) floyd(g,n); /调用洛伊德算法 printf(输入源点(或称起点)和终点: v,w: ); scanf(%d,%d,&v,&w); k=pvw; /k为起点v的后继顶点 if(k=0) printf(从顶点%d 到 %d 无路径!n,v,w); else printf(从顶点 %d 到 %d 的最短路径是:%d,v,w,v); while(k!=w) printf(-%d,k); /输出后继顶点 k=pkw; /继续找下一个后继顶点 printf(-%dn,w); /输出终点w printf(

8、路径长度: %dn,dvw); else if(xz=1) printf(求单源路径,输入源点v:); scanf(%d,&v); dijkstra(g,v,n); /调用迪杰斯特拉算法 printf(结束求最短路径,再见!n);/建立有向图的存储结构void createmgraph(mgraph *g,int n,int e)int i,j,k,w;for (i=1;ivexsi=(char)i;for(i=1;i=n;i+)for(j=1;jarcsij=maxint;printf(输入%d 条边i,j及 w:n,e);for(k=1;karcsij=w;printf(有向图的存储结构建

9、立完毕!n);/迪杰斯特拉算法void dijkstra(mgraph g,int v1,int n)int d2mvnum,p2mvnum;int v,i,w,min;boolean smvnum;for(v=1;v=n;v+)sv=false;d2v=g.arcsv1v;if(d2vmaxint)p2v=v1;elsep2v=0;/end_ford2v=0;sv=true;for(i=2;in;i+)min=maxint;for(w=1;w=n;w+) /更新当前最短路径及距离if(!sw&d2wmin)v=w;min=d2w;sv=true;for(w=1;w=n;w+)if(!sw&(

10、d2v+g.arcsvwd2w)d2w=d2v+g.arcsvw;p2w=v;/end_if/end_forprintf(路径长度 路径n);for(i=1;i=n;i+)printf(%5d,d2i);printf(%5d,i);v=p2i;while(v!=0)printf(-%d,v);v=p2v;printf(n);/费洛伊德算法void floyd(mgraph g,int n)int i,j,k;for(i=1;i=n;i+)for(j=1;j=n;j+)if(g.arcsij!=maxint)pij=j;elsepij=0;dij=g.arcsij;for(k=1;k=n;k+)

11、 for(i=1;i=n;i+) for(j=1;j=n;j+) if (dik+dkjdij) dij=dik+dkj;pij=pik; 四、运行结果截图展示 五、实验心得 本实验是对图结构的应用,本章的课程设计是数据结构这门课程的重点,也是应用非常广泛的一种技术,针对图的存储结构以及最短路径等概念进行了综合练习。求最短路径部分是以邻接矩阵作为存储结构,而求关键路径则是以邻接表形式存储。其中运用到两个重要算法,一个是迪杰斯特拉算法,另一个是费洛伊徳算法。 图是一种较线性表和树更为复杂的数据结构,在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继,在图的结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 实验同时说明,图的应用极为广泛,特别是近年来的迅速发展,已经渗入到各个学科中去,例如:在这学期管理运筹学中离散数学中关于图与网络的章

温馨提示

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

评论

0/150

提交评论