交通咨询系统数据结构c语言.pdf
《交通咨询系统数据结构c语言.pdf》由会员分享,可在线阅读,更多相关《交通咨询系统数据结构c语言.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数 据 结 构 课 程 设 计 交通咨询系统设计 学 生 姓 名:学 号:指 导 教 师:完 成 日 期:目 录 1 设计任务书.1 1.1 题目与要求.1 1。2 知识点.1 1。3 输入输出分析.1 1。4 实现的功能.1 2 概要设计.2 2.1 结构体类型及函数声明.2 2。2 主程序流程.2 3 详细设计.3 3。1 数据类型实现.3 3.2 程序代码.3 4 调试分析.11 4。1 问题分析与回顾.11 4.2 算法时空分析.11 4.3 算法改进.11 4。4 经验和体会.12 5 测试结果.12 参考文献.14 1 1 设计任务书 1。1 题目与要求 题目:编写程序实现交通咨
2、询系统设计的模拟。要求:(1)建立交通网络网的存储结构;(2)总体设计要画流程图;(3)提供程序测试方案;(4)界面友好。1.2 知识点 本次课程设计应用到了图的创建、邻接矩阵、迪杰斯特拉算法、弗洛伊德算法、结构体、宏定义、自定义类型、函数的声明与调用等知识点.1。3 输入输出分析(1)普通输入 对于图的存储,我采用的是邻接矩阵的方法,借助于邻接矩阵容易判定任意两个顶点之间是否有弧相连,也容易求得各段弧的权值。(2)对话式输入 在用户选择系统功能时,我采用的是对话式输入,让用户输入系统功能的代号,利用 switch语句判断用户输入的指令并调用相应的函数实现具体功能。(3)程序输出 对于用户查询
3、结果的展示,考虑美观以及方便用户的因素,我写了一个 pri()函数输出各个城市的代码城市名字对照表,用户可以更方便的使用.对于用户查询一个城市到所有城市的最短路径时,考虑到显示结果较多,我采用表格的形式进行显示,使界面更美观.1.4 实现的功能 在交通网络越来越发达的今天,人们出去旅行、出差更多的会考虑选择最短路径或最小花费等问题,因此我设计了一个交通咨询系统。这个系统可以根据用户的选择实现3 种功能:求一个城市到所有城市的最短路径;求两个城市间的最短路径;求两个城市间的最小花费。2 2 概要设计 2。1 结构体类型及函数声明(1)结构体 路径图结构体类型 MGraph 花费图结构体类型 HG
4、raph (2)函数声明 void pri()/输出城市代号对照表函数。void CreateMGraph(MGraph G)/创建路径图函数,路径图存放于 G 中。void CreateHGraph(HGraph H)/创建花费图函数,花费图存放于 H 中。void Dijkstra(MGraph G,int v1,int n)/迪杰斯特拉算法求单源最短路径函数,v1为源点,n 为城市个数,这个图存放于 G 中。void Floyd(MGraph G,int n)/弗洛伊德求两点间最短路径函数,n 表示城市个数,这个图存放于 G 中。void Floyd1(HGraph*H,int n)/弗
5、洛伊德求两点间最小花费函数,n 表示城市个数,这个图存放于 H 中。2.2 主程序流程(1)主程序调用模块图 主程序利用 switch()语句实现各个模块的调用,主函数调用如图 21 所示。图 2-1 主程序调用模块图 主程序根据不同值主调函数 0退出 1求单源最短路径 2求两点间最短路径 3求两点间最小花费 3 3 详细设计 3.1 数据类型实现 (1)路径图结构体类型 Vertextype vexsMVNum;/顶点数组,顶点表示城市代号 Adjmatrix arcsMVNum MVNum;/邻接矩阵定义路径图 MGraph;(2)花费图结构体类型 typedef struct Verte
6、xtype vexsMVNum;/顶点数组,顶点表示城市代号 Adjmatrix arcsMVNum MVNum;/邻接矩阵定义花费图 HGraph;3。2 程序代码#includevexsi=(char)i;for(i=1;i=14;i+)for(j=1;jarcs12=Garcs21=137;G-arcs24=Garcs42=674;Garcs13=G-arcs31=695;Garcs34=G-arcs43=349;Garcs35=G-arcs53=511;Garcs56=Garcs65=842;G-arcs37=G-arcs73=534;G-arcs48=G-arcs84=651;G-a
7、rcs613=G-arcs136=1100;G-arcs612=G-arcs126=967;Garcs711=G-arcs117=409;G-arcs810=G-arcs108=825;G-arcs910=Garcs109=622;Garcs1011=Garcs1110=367;Garcs1112=Garcs1211=902;G-arcs1213=Garcs1312=639;Garcs1114=G-arcs1411=675;void CreateHGraph(HGraph H)/采用邻接矩阵表示法构造有向图 H,此图为带权花费图 int i,j;for(i=1;i=14;i+)/输入顶点信息
8、H-vexsi=(char)i;for(i=1;iarcs24=Harcs42=93;H-arcs13=H-arcs31=93;H-arcs34=H-arcs43=51;Harcs35=H-arcs53=72;H-arcs56=H-arcs65=112;Harcs37=H-arcs73=75;H-arcs48=Harcs84=91;H-arcs613=Harcs136=141;Harcs612=H-arcs126=128;H-arcs711=Harcs117=62;Harcs810=H-arcs108=105;Harcs910=H-arcs109=86;H-arcs1011=H-arcs111
9、0=53;H-arcs1112=H-arcs1211=115;Harcs1213=Harcs1312=86;Harcs1114=Harcs1411=91;/以下是迪杰斯特拉算法 void Dijkstra(MGraph G,int v1,int n)/用 Dijkstra 算法求有向网 G 的 v1 顶点到其他顶点 v 的最短路径 Pv及其权 Dv /设 G 是有向图的邻接矩阵,若边i,j不存在则 Gij=Maxint /Sv为真当且仅当 v 属于 S,即已经求得从 v1 到 v 的最短路径 int DMVNum,P2MVNum;int v,i,w,min;enum boolean SMVNu
10、m;for(v=1;varcsv1v;/置初始的最短路径值 if(Dv Maxint)P2v=v1;/v1 是前趋双亲 else P2v=0;/v 无前趋 /End_for Dv1=0;Sv1=TRUE;/S 集初始时只有源点 源点到源点的距离为 0 /开始循环每次求的 V1 到某个 V 顶点的最短路径并加 V 到 S 集中 7 for(i=2;i=n;i+)/其余 n1 个顶点 min=Maxint;/当前所知离 v1 顶点的最近距离设初值为 for(w=1;w=n;w+)/对所有顶点检查 if(!Sw&Dwmin)/找离 v1 最近的顶点 w 并将其赋给 v 距离赋给 min v=w;/在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通 咨询 系统 数据结构 语言
限制150内