没有合适的资源?快使用搜索试试~ 我知道了~
(完整word版)全国交通咨询模拟数据结构课程设计.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 8 下载量 187 浏览量
2022-10-29
20:02:10
上传
评论 2
收藏 257KB DOCX 举报
温馨提示
试读
63页
(完整word版)全国交通咨询模拟数据结构课程设计.docx(完整word版)全国交通咨询模拟数据结构课程设计.docx
资源推荐
资源详情
资源评论
(完整 word 版)全国交通咨询模拟数据结构课程设计
数据结构课程设计报告
题目:
全国交通咨询模拟
一.需求分析
1.程序设计任务:
从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线
和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。利用该系统实现两种
最优决策:最快到达或最省钱到达。
2. 明确规定:
(1)输入形式和输入值的范围:
每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达
时间、班次以及费用。作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入
- 0 -
(完整 word 版)全国交通咨询模拟数据结构课程设计
的信息有起始城市和目的城市,并选择何种最优决策。
(2)输出形式:
按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起
始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱
多少钱到达和最少经多少中转站到达。
(3)程序所能达到的功能
a.该系统有供用户选择的菜单和交互性。可以对城市、列车车次和飞机航班进行编辑,添加或删
除。
b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和
最少花费及中转次数最少等功能。
c.初始化交通系统有两种方式,键盘和文档。
二.
设计概要
1. 算法设计
(1)、总体设计
(1) 数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻 )存储于
磁盘文件。建议把城市信息存于文件前面,交通信息存于文件的后面,用 fread 和 fwrite 函数
操作。
(2) 数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可
看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或
旅费。
(3) 数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,
宜采用邻接表,以提高空间的存储效率。这里采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。添加、修改、删除功能可用菜单方
- 1 -
(完整 word 版)全国交通咨询模拟数据结构课程设计
式或命令提示方式。只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面。
(5) 最优决策功能模块(fast or province)。
① 读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及
对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素
所代表的城市有交通联系的城市(代码、里程、航班、列车车次)。
② 根据具体最优决策的要求,用 Dijkstra 算法求出出发城市到其它各城市的最优值(最短
时间或最小的费用),搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。其
目的城市所代表的元素中就保存了所需的最优决策结果。这过程中,要用队列或栈保存局部最
优决策值(局部最短的时间或最省的费用)变小的城市,其相应的初始值可为∞,并在表头数组对
应的城市元素中保存响应的信息。开始时,栈 (队列)中只有出发地城市,随着对栈 (队列)顶(首)
城市有交通联系的城市求得决策值 (最短时间或最小的费用),若该值是局部最优值且该城市不在
栈(队列)中,则进栈(队列),直至栈(队列)为空,本题采用队列实现。
③ 输出结果:从目的城市出发,搜索到出发城市,所经过的城市均入栈(队列),再逐一出
栈栈(队列)中的城市,输出保存在表头数组中对应城市的信息 (对方城市的出发信息,里程、时
间、费用等)及最终结果。即输出依次于何时何地乘坐几点的飞机或火车于何时到达何地;最终
所需的最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间。
(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序
运行过程中可以反复操作。
(2).详细设计思想:
本题所要求的交通系统是一个有向带权图结构,考虑到要求该系统有动态增加飞机和列车
航班的功能,因而采用邻接表的形式存储:对每个顶点建立一个单链表,单链表中的子结点表
示以该顶点连接的弧,单链表中子结点的顺序可以按权值递增的顺序排列,表头结点按顺序存
储。题目中提到要提供三种策略,最快到达,最省钱到达和最少中转次数策略,前两种策略采
- 2 -
(完整 word 版)全国交通咨询模拟数据结构课程设计
用迪杰斯特拉算法思想,其中最快到达的权值为到达两城市所需的最短时间,最省钱到达的权
值为到达两城市所需的费用,后一种采用广度优先算法的思想,只需求的两城市所在的层数,
就可以求的到达两城市所需的最少中转次数。
迪杰斯特拉(Dijkstra)算法的基本思想是:
设置两个顶点的集合 S 和 T=V-S,集合 S 中存放已找到最短路径的顶点,集合 T 存放当前还
未找到最短路径的顶点。初始状态时,集合 S 中只包含源点 v0,然后不断从集合 T 中选取到顶
点 v0 路径长度最短的顶点 u 加入到集合 S 中,集合 S 每加入一个新的顶点 u,都要修改顶点
v0 到集合 T 中剩余顶点的最短路径长度值,集合 T 中各顶点新的最短路径长度值为原来的最短
路径长度值与顶点 u 的最短路径长度值加上 u 到该顶点的路径长度值中的较小值。此过程不断
重复,直到集合 T 的顶点全部加入到 S 中为止。
下面讨论基于邻接表的存储结构求两点间最短路径的方法:
根据迪杰斯特拉(Dijkstra)算法所依据的原理:若按长度递增的次序生成从源点 V0 到其它顶点
的最短路径,则当前正在生成的最短路径上除终点以外,其余顶点的最短路径均已生成(将源
点的最短路径看作是已生成的源点到其自身的长度为 0 的路径)。
按照这一思想,构造以下算法:
设 S=S’=U={},建立数组 PATH[n],用来存储 V0 到各终点的最短路径,初值均置为空集。
建立数组 BOOL F[n] ,F[i]表示序号为 i 的表头结点的单链表中所有子结点已或未全部找到,初
值置为 FALSE。建立数组 float dist[n],dist[i]表示序号为 i 的表头结点到 V0 的最短权值(这
里是时间或费用),显然 dist[V0]=0,其他顶点的 dist 初值置为∞。建立数组 BOOL IS[n],IS[i]
表示序号为 i 的顶点是否在 S 中,初值均置为 FALSE。
(1)VX=V0;最短的最短路径为 PATH[0]=[V0]
(2)S=S+VX;(集合的并计算)
IS[VX]=TRUE;
- 3 -
(完整 word 版)全国交通咨询模拟数据结构课程设计
S’=S’+VX ;
(3)对 S’中的所有顶点:
{
do{ 由邻接表中该表头结点开始依次找单链表的下一子结点(沿链域指针依次访问);
if(该子结点∈S)//IS[该子结点的邻接点序号]==TRUE
if(子结点链域指针指向 NULL)
F=TRUE;S’=S’-该表头结点;
break;
else continue;
else break;
}
while();
如 F=FALSE,则 U=U+该子结点;
}
如果 S’=空集,则结束;
(4)下一次短路径的终点必∈U。比较 U 中子结点到 V0 的 dist 值(其值为 U 中结点的弧的权值
+其表头结点的 dist 值),由 dist 值最小的子结点的邻接点域确定次短路径的终点 VX,
PATH[ VX]=PATH[该子结点的表头结点]+[VX](集合的并计算)。dist[VX]=VX 所属子结点的
弧的权值+其表头结点的 dist 值。
U={};
如果 VX 为所要找的顶点,则结束;
回到 2 执行。
广度优先搜索遍历图类似于树的按层次遍历,其基本思想是:首先访问图中某指定的起始
- 4 -
剩余62页未读,继续阅读
G11176593
- 粉丝: 6643
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页