每一行记录路径信息,总共有四列,分别对应着公交车编号,起点编号,终点编号以及路段的长度
文件格式如下:
公交车编号|起点编号|终点编号|路段长度
每三行记录一个公交车信息
第一行:公交车名称
第二行:公交车起始站点
第三行:公交车终止站点
文件格式如下:
每一行记录一个站点名称,其位次为站点的编号+1
文件格式如下:
- 根据公交名查找公交的编号
- 通过公交编号,确定公交的起点和终点
- 再使用深度搜索方式,查找到对应公交车的线路信息
- 确定站点的编号
- 先将该站点的下行路线遍历,确定从该站点驶出的公交车
- 对所有站点的下行路线进行查找,查看是否有下一站为该站点,如果是,这条线路的公交车则会驶入该站点
- 先查询两个站点之间是否存在路径
- 将所有站点标志为未访问,起始站点存入栈中,起始站点标志为已访问
- 采用使用深度搜索的方式,取出栈顶站点搜索下一个站点,如果站点已访问,则将此忽略
- 直到找到终止站点,或全部站点都已访问都未能找到终止站点
- 如果两个站点间存在路径,则查询路线,否则,将结果输出为“两站点间不存在路径”
- 通过搜索,先将起始站点的各个下行路线保存至数组中
- 对于每个下行路线,进行深度搜索,每次将能通过此路线的公交车到达的所有站点入栈,并将站点标志为已访问
- 每次取出栈顶站点,搜索通过此站点,能否通过最多一次换乘,而到达终止站点,如果能到达,则将该路线数据保存
因为文件修改类似,所以其修改方式也类似,主要将9种用于修改的函数分为三类,添加,删除和更新,而这三类修改的主要原理我使用的是通过副本来进行修改,以下为主要修改步骤
- 创建一个副本
- 扫描需要更新的文件,当遇到需要修改的地方,进行适当修改,同时把数据输入进副本中
- 删除原文件,将副本重命名为原文件格式,删除副本
-
存储结构:邻接表
-
主要操作:
- 读取文件数据,获取数量信息
- 依据数量分配内存空间
- 将数据加载到图中
-
主要存储结构源代码如下:
//整个公交地图的信息
typedef struct BusMap
{
Bus* buses; //公交线路数组
Station* stations; //站点数组
int station_num; //站点数
int bus_num; //公交线路数
}BusMap;
找到至多换乘1次的路线,并输出结果。
修改公交车、公交线路和站点信息,保存文件(测试顺序为增加->更新->删除)
这次的数据结构课程设计,是我第一次使用MFC构造公交线路图的图形化界面,虽然在实现过程中遇到了很多坎坷,但是在摸索中不断学习,不断进步,同时掌握了很多关于构建图形化界面的知识。在使用一些控件的时候,从不了解到掌握,慢慢地学会之间的一些函数,然后用这些函数去实现一些自己想要实现的功能,这真的是种很开心的事情。
同时,这次的主要使用的数据结构是图,然后也算重新复习了上学期《数据结构》中学习到的图的知识,利用其中的一些算法,去完成本次课程设计,让自己的程序尽可能地完美,不出现太多的漏洞。
然后,这次也要求使用文件读写功能,让程序和数据分割开来。虽然文件读写在大一就已经学过了,但是在这次课程设计之后,我发现其中还是有很多自己不懂的部分,也通过这次课程设计系统地学习了文件读写功能,也争取在下次想要实现一些系统的时候,也能将这种思想很好地利用。