全国交通咨询模拟数据结构课程设计
全国交通资讯模拟数据结构课程设计报告

全国交通咨询模拟系统的设计与实现1.问题描述出于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
2.需求分析(1) 提供对城市信息进行编辑( 如: 添加或删除) 的功能。
(2) 城市之间有两种交通工具:火车和飞机。
(3) 提供两种最优决策: 最快到达或最省钱到达。
全程只考虑一种交通工具。
(4) 旅途中耗费的总时间应该包括中转站的等候时间。
(5) 咨询以用户和计算机的对话方式进行。
由用户输入起始站、终点站、最优决策原则和交通工具, 输出信息: 最快需要多长时间才能到达或者最少需要多少旅费才能到达, 并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
3.概要设计因为全国交通咨询模拟中有众多城市之间的连接关系,为实现全国交通咨询系统的开发,采用图类型与邻接表类型来存储城市之间的信息。
下面给出他们的ADT的定义。
3.1 抽象数据类型定义如下:typedef struct unDiGraph{int numVerts; //结点costAdj cost; //邻接矩阵}unDiGraph,*UNG;基本操作:unDiGraph* CreateCostG()操作结果:构造带权(费用)图。
unDiGraph* CreateTimeG()操作结果:构造带权(时间)图。
构造飞机带权(费用)图。
PathMat *Floyed(unDiGraph *D)操作结果:Floyed函数求任意两点的最短路径。
3.2 系统功能模块设计全国交通咨询模拟系统由4个功能模块组成:添加城市、删除程序、采用火车出行、采用飞机出行下面给出功能模块图,如图3-1所示。
图3-1全国交通咨询模拟功能模块图3.3主要函数调用关系图(给出ADT内基本操作的那些函数之间的函数调用关系图)如图3-2所示。
数据结构课程设计全国交通模拟汇总

数据结构课程设计报告班级:191113学号:20111000611姓名:黄建钊指导老师:朱晓莲日期:2013年3月7.全国交通咨询模拟出于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
要求:(1)提供对城市信息进行编辑(如添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
1.需求分析1、设计最短路径的算法及其需要信息的存储:本设计中最短路径的算法利用迪杰斯特拉算法,存储方法利用邻接矩阵存储。
2、该程序所做的工作的是模拟全国交通咨询,为旅客提供种最优决策的交通咨询。
此程序规定:在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个字符串类型;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入一个整型数据,在选择功能时,应输入与所选功能对应的一个整型数据。
程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,说明在途中经过的城市名称;程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供两种最优决策:最快到达、最省钱到达。
2.设计2.1设计思想本系统整体上分为存储系统和求最短路径两部分,存储系统运用到数组和结构体。
该系统分别存储火车列次,航班,出发点与目的地以及所需要走的路程和所用费用。
最短路径使用迪杰斯特拉算法编程求算得出最近或最便宜路径。
该算法主要分为三步:1、起始点(V0)与其相邻点的权值(即当前最短路径)。
数据结构课程设计全国交通咨询系统

.郑州工业应用技术学院课程设计任务书题目全国交通资询系统主要内容:设计了一个方便用户查询交通咨询系统。
该系统所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。
该系统可以进行城市,列车车次和飞机航班的编辑的基本信息输入操作。
程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。
基本要求:1、掌握C语言的变量及函数的灵活使用;2、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;3、掌握C语言中文件的基本操作;4、掌握VC++6.0软件的熟练使用。
主要参考资料:[1] 李春葆.数据结构程序设计[M].北京:清华大学出版社,2002,03[2] 王黎,袁永康战略[M].北京:清华大学出版社,2002,01[3] 谭浩强.C程序设计第二版[M].北京:清华大学出版社,2003,03[4] 任哲.MFC Windows程序设计[M].北京:清华大学出版社,2004,06完成期限:2016.12.05—2017.01.05指导教师签名:课程负责人签名:随着高科技的飞速发展,列车、飞机、动车、高铁的出现极大的减少了人们花在旅途上的时间。
对于城市间错综复杂交通网的管理,是一项庞大而复杂的工作。
在此基础上,如何实现交通网智能化的管理达到帮助乘客选择经济高效的交通工具是目前仍处空白。
尤其乘客交通工具的择优选择是一个令人懊恼的工作,一个原因就是各种交通工具的查询十分分散和繁琐。
即使有互联网的帮忙,但是没有一个统一的归类、没有一个精细的算法、系统的软件帮助,人们仍然无法获得最优方式。
为此开发一个交通择优系统是十分必要的。
采用计算机对城市间的交通工具进行系统录入和管理,进一步提高了交通部门针对城市间客运网络的管理效率,实现交通运营网络的系统化、规范化和自动化。
数据结构课程设计全国交通咨询系统方案

工业应用技术学院课程设计任务书题目全国交通资询系统主要容:设计了一个方便用户查询交通咨询系统。
该系统所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。
该系统可以进行城市,列车车次和飞机航班的编辑的基本信息输入操作。
程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。
基本要求:1、掌握C语言的变量及函数的灵活使用;2、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;3、掌握C语言中文件的基本操作;4、掌握VC++6.0软件的熟练使用。
主要参考资料:[1] 春葆.数据结构程序设计[M].:清华大学,2002,03[2] 王黎,袁永康战略[M].:清华大学,2002,01[3] 谭浩强.C程序设计第二版[M].:清华大学,2003,03[4] 任哲.MFC Windows程序设计[M].:清华大学,2004,06完成期限:2016.12.05—2017.01.05指导教师签名:课程负责人签名:随着高科技的飞速发展,列车、飞机、动车、高铁的出现极大的减少了人们花在旅途上的时间。
对于城市间错综复杂交通网的管理,是一项庞大而复杂的工作。
在此基础上,如何实现交通网智能化的管理达到帮助乘客选择经济高效的交通工具是目前仍处空白。
尤其乘客交通工具的择优选择是一个令人懊恼的工作,一个原因就是各种交通工具的查询十分分散和繁琐。
即使有互联网的帮忙,但是没有一个统一的归类、没有一个精细的算法、系统的软件帮助,人们仍然无法获得最优方式。
为此开发一个交通择优系统是十分必要的。
采用计算机对城市间的交通工具进行系统录入和管理,进一步提高了交通部门针对城市间客运网络的管理效率,实现交通运营网络的系统化、规化和自动化。
数据结构课程设计全国交通模拟

数据结构课程设计报告班级:191113学号:20111000611姓名:黄建钊指导老师:朱晓莲日期:2013年3月7.全国交通咨询模拟出于不同目的的旅客对交通工具有不同的要求。
例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。
编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。
要求:(1)提供对城市信息进行编辑(如添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。
提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。
全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。
1.需求分析1、设计最短路径的算法及其需要信息的存储:本设计中最短路径的算法利用迪杰斯特拉算法,存储方法利用邻接矩阵存储。
2、该程序所做的工作的是模拟全国交通咨询,为旅客提供种最优决策的交通咨询。
此程序规定:在程序中输入城市名称时,需输入10个字母以内的字母串;输入列车或飞机编号时需输入一个字符串类型;输入列车或飞机的费用时需输入一个实型数据;输入列车或飞机开始时间和到达时间时均需输入一个整型数据,在选择功能时,应输入与所选功能对应的一个整型数据。
程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,说明在途中经过的城市名称;程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供两种最优决策:最快到达、最省钱到达。
2.设计2.1设计思想本系统整体上分为存储系统和求最短路径两部分,存储系统运用到数组和结构体。
该系统分别存储火车列次,航班,出发点与目的地以及所需要走的路程和所用费用。
最短路径使用迪杰斯特拉算法编程求算得出最近或最便宜路径。
该算法主要分为三步:1、起始点(V0)与其相邻点的权值(即当前最短路径)。
交通咨询模拟数据结构课程设计

数据结构课程设计报告题目:全国交通咨询模拟一.需求分析1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。
利用该系统实现两种最优决策:最快到达或最省钱到达。
2. 明确规定:(1)输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。
作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。
(2)输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。
(3)程序所能达到的功能a.该系统有供用户选择的菜单和交互性。
可以对城市、列车车次和飞机航班进行编辑,添加或删除。
b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。
c.初始化交通系统有两种方式,键盘和文档。
二.设计概要1. 算法设计(1)、总体设计(1) 数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。
建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。
(2) 数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。
(3) 数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。
这里采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。
添加、修改、删除功能可用菜单方式或命令提示方式。
(完整word版)数据结构课程设计-全国交通咨询系统

X X 学院计算机系《数据结构》课程设计报告书全国交通咨询模拟系统的设计与实现学生姓名:学号:年级专业及班级:指导老师及职称:讲师专业:计算机科学与技术专业提交日期:2011年6月全国交通咨询模拟系统的设计与实现学生:指导老师:(怀化学院计算机系,怀化418008)摘要:该课程设计主要实现了对全国火车及飞机信息的修改和查询,其中主要包括:管理员对火车、飞机信息的操作,其中又包含对两种交通方式的增加和删除操作.旅客用户对两种交通信息的查询,其中飞机信息和火车信息都包含了对两个站点间最短路径方式的查询、最少花费方式的查询以及城市中所有的交通信息的查询.关键词:全国交通咨询;1前言为了完成数据结构的课程设计,为了巩固自己数据结构的知识,也是为了提高自己的编程能力和逻辑思维能力,我选了这道全国交通咨询模拟系统的设计与实现一题。
在对其需求进行分析之后,按照需求分析,逐步完成其各部分的功能实现.对于总的方面来讲,管理员功能实现并不难,而难点在于用户功能中的算法及数据结构中的知识以及编程的细微方面,下面将详细介绍本课程设计的内容.2需求分析2.1 范围2.1。
2 系统概述1.软件名称:全国交通咨询系统V1.02.软件功能:主要的功能有:管理员增删和修改城市站点信息、飞机路线信息、火车路线信息。
3.用户:查询最小耗费路线、查询最短时间路线、查询城市所有路线.4.开发者:2.1.3 文档概述需求分析采用在面向对象的方法,主要使用结构体struct的方法来进行实际的编程,在文档中主要采E—R图和对功能的简单描述的方法来表述系统的需求。
本需求分析的审查者是老师,所以主要是写给老师看的,用来说明我对这个系统的分析情况。
2.2 引用文件无2.3 需求概述2.3。
1 系统目标本系统的总体目标是通过使用该系统,管理员可以对飞机或者火车的信息的简单管理,也方便外出旅客在不同的需求下(如:最少的花费和最短的路程),快速浏览到所要的信息。
数据结构课程设计报告全国交通咨询系统

.郑州工业应用技术学院课程设计任务书题目全国交通资询系统主要内容:设计了一个方便用户查询交通咨询系统。
该系统所做的工作的是模拟全国交通咨询,为旅客提供三种最优决策的交通咨询。
该系统可以进行城市,列车车次和飞机航班的编辑的基本信息输入操作。
程序的输出信息主要是:最快需要多少时间才能到达,或最少需要多少旅费才能到达,或最少需要多少次中转到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
程序的功能包括:提供对城市信息的编辑,提供列车时刻表和飞机航班表的编辑,提供三种最优决策:最快到达、最省钱到达、最少中转次数到达。
基本要求:1、掌握C语言的变量及函数的灵活使用;2、熟练掌握图的深度、广度优先遍历算法思想及其程序实现;3、掌握C语言中文件的基本操作;4、掌握VC++6.0软件的熟练使用。
主要参考资料:[1] 李春葆.数据结构程序设计[M].北京:清华大学出版社,2002,03[2] 王黎,袁永康战略[M].北京:清华大学出版社,2002,01[3] 谭浩强.C程序设计第二版[M].北京:清华大学出版社,2003,03[4] 任哲.MFC Windows程序设计[M].北京:清华大学出版社,2004,06完成期限:2016.12.05—2017.01.05指导教师签名:课程负责人签名:随着高科技的飞速发展,列车、飞机、动车、高铁的出现极大的减少了人们花在旅途上的时间。
对于城市间错综复杂交通网的管理,是一项庞大而复杂的工作。
在此基础上,如何实现交通网智能化的管理达到帮助乘客选择经济高效的交通工具是目前仍处空白。
尤其乘客交通工具的择优选择是一个令人懊恼的工作,一个原因就是各种交通工具的查询十分分散和繁琐。
即使有互联网的帮忙,但是没有一个统一的归类、没有一个精细的算法、系统的软件帮助,人们仍然无法获得最优方式。
为此开发一个交通择优系统是十分必要的。
采用计算机对城市间的交通工具进行系统录入和管理,进一步提高了交通部门针对城市间客运网络的管理效率,实现交通运营网络的系统化、规范化和自动化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告题目:全国交通咨询模拟一.需求分析1.程序设计任务:从中国地图平面图中选取部分城市,抽象为程序所需要图的结点,并以城市间的列车路线和飞机路线,作为图结点中的弧信息,设计一个全国交通咨询模拟系统。
利用该系统实现两种最优决策:最快到达或最省钱到达。
2. 明确规定:(1)输入形式和输入值的范围:每条飞机弧或者火车弧涉及的信息量很多,包括:起始城市、目的城市、出发时间、到达时间、班次以及费用。
作为管理员要输入的信息包括以上信息,而作为用户或者客户,要输入的信息有起始城市和目的城市,并选择何种最优决策。
(2)输出形式:按用户提供的最优决策的不同而输出不同的信息,其中输出的所搭飞机或火车的班次及其起始地点和终点、起始时间和出发时间还有相关的最优信息,比如最快经多少时间到达、最省钱多少钱到达和最少经多少中转站到达。
(3)程序所能达到的功能a.该系统有供用户选择的菜单和交互性。
可以对城市、列车车次和飞机航班进行编辑,添加或删除。
b.建立一个全国交通咨询系统,该系统具备自动查找任意两城市间铁路、飞机交通的最短路径和最少花费及中转次数最少等功能。
c.初始化交通系统有两种方式,键盘和文档。
二.设计概要1. 算法设计(1)、总体设计(1) 数据存储:城市信息(城市名、代码)、交通信息(城市间的里程、各航班和列车时刻)存储于磁盘文件。
建议把城市信息存于文件前面,交通信息存于文件的后面,用fread和fwrite函数操作。
(2) 数据的逻辑结构:根据设计任务的描述,其城市之间的旅游交通问题是典型的图结构,可看作为有向图,图的顶点是城市,边是城市之间所耗费的时间(要包括中转站的等候时间)或旅费。
(3) 数据的存储结构:采用邻接表和邻接矩阵都可作为数据的存储结构,但当邻接边不多时,宜采用邻接表,以提高空间的存储效率。
这里采用邻接表作为数据的存储结构。
(4) 用不同的功能模块对城市信息和交通信息进行编辑。
添加、修改、删除功能可用菜单方式或命令提示方式。
只要能方便的对城市信息和交通信息进行管理即可,但要注意人机界面。
(5) 最优决策功能模块(fast or province)。
①读入城市信息和交通信息,用邻接表生成含权网络,表头数组中的元素存放城市名及对方城市到达该元素所代表城市的所有信息;表头数组中的元素所对应的单链表存放与该元素所代表的城市有交通联系的城市(代码、里程、航班、列车车次)。
②根据具体最优决策的要求,用Dijkstra算法求出出发城市到其它各城市的最优值(最短时间或最小的费用),搜索过程中所经过城市的局部最优信息都保存在邻接表的表头数组中。
其目的城市所代表的元素中就保存了所需的最优决策结果。
这过程中,要用队列或栈保存局部最优决策值(局部最短的时间或最省的费用)变小的城市,其相应的初始值可为∞,并在表头数组对应的城市元素中保存响应的信息。
开始时,栈(队列)中只有出发地城市,随着对栈(队列)顶(首)城市有交通联系的城市求得决策值(最短时间或最小的费用),若该值是局部最优值且该城市不在栈(队列)中,则进栈(队列),直至栈(队列)为空,本题采用队列实现。
③输出结果:从目的城市出发,搜索到出发城市,所经过的城市均入栈(队列),再逐一出栈栈(队列)中的城市,输出保存在表头数组中对应城市的信息(对方城市的出发信息,里程、时间、费用等)及最终结果。
即输出依次于何时何地乘坐几点的飞机或火车于何时到达何地;最终所需的最快需要多长时间才能到达及旅费,或者最少需要多少旅费才能到达及时间。
(6) 主程序可以有系统界面、菜单;也可用命令提示方式;选择功能模块执行,要求在程序运行过程中可以反复操作。
(2).详细设计思想:本题所要求的交通系统是一个有向带权图结构,考虑到要求该系统有动态增加飞机和列车航班的功能,因而采用邻接表的形式存储:对每个顶点建立一个单链表,单链表中的子结点表示以该顶点连接的弧,单链表中子结点的顺序可以按权值递增的顺序排列,表头结点按顺序存储。
题目中提到要提供三种策略,最快到达,最省钱到达和最少中转次数策略,前两种策略采用迪杰斯特拉算法思想,其中最快到达的权值为到达两城市所需的最短时间,最省钱到达的权值为到达两城市所需的费用,后一种采用广度优先算法的思想,只需求的两城市所在的层数,就可以求的到达两城市所需的最少中转次数。
迪杰斯特拉(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;S’=S’+VX ;(3)对S’中的所有顶点:{do{ 由邻接表中该表头结点开始依次找单链表的下一子结点(沿链域指针依次访问);if(该子结点∈S)//IS[该子结点的邻接点序号]==TRUEif(子结点链域指针指向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执行。
广度优先搜索遍历图类似于树的按层次遍历,其基本思想是:首先访问图中某指定的起始点Vi并将其标记为已访问过,然后由Vi出发访问与它相邻接的所有顶点Vj、 Vk……,并均标记为已访问过,然后再按照Vj、Vk……的次序,访问每一个顶点的所有未被访问过的邻接顶点,并均标记为已访问过,下一步再从这些顶点出发访问与它们相邻接的尚未被访问的顶点,如此做下去,直到所有的顶点均被访问过为止。
2.抽象数据类型本程序运用了关于图这种数据结构。
ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。
数据关系R:R={VR}VR={<v,w>|v,w∈V且P(v,w),<v,w>表示从v到w的弧。
谓词P(v,w)定义了弧<v,w>的意义或信息} 基本操作P:CreateGraph(&G,V,VR);初始条件:V是图的顶点集,VR是图中弧的集合。
操作结果:按V和VR的定义构造图G。
DestroyGraph(&G);初始条件:图G存在。
操作结果:销毁图G。
LocateVet(G,u);初始条件:图G存在,u和G中顶点有相同的特征。
操作结果:若G中存在顶点u,则返回该顶点在图中的位置,否则返回其他信息。
GetVex(G,v);初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的值。
PutVex(&G,v,value);初始条件:图G存在,v是G中某个顶点。
操作结果:对v赋值value。
FirstAdjVex(G,v);初始条件:图G存在,v是G中某个顶点。
操作结果:返回v的第一个邻接顶点。
若顶点在G中没有邻接顶点,则返回“空”。
NextAdjVex(G,v,w);初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点,操作结果:返回v的(相对于w的)下一个邻接顶点。
若w是v的最后一个邻接点,则返回“空”。
InsertVex(&G,v);初始条件:图G存在,v和图中顶点有相同特征。
操作结果:在图G中添加新顶点v。
DeleteVex(&G,v);初始条件:图G存在,v是G中某个顶点。
操作结果:删除G中顶点v及相关弧。
InsertArc(&G,v,w);初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中增添弧<v,w>,若G是无向的则还增加对称弧 <w,v>。
DeleteArc(&G,v,w);初始条件:图G存在,v和w是G中两个顶点。
操作结果:在G中删除弧<v,w>,若G是无向的,则还删除对称弧<w,v>。
DFSTraverse(G,Visit());初始条件:图G存在,Visit是顶点的应用函数。
操作结果:对图进行深度优先遍历。
在遍历过程中对每个顶点调用函数Visit一次且仅一次。
一旦visit()失败,则操作失败。
BFSTraverse(G,Visit());初始条件:图G存在,Visit是顶点的应用函数。
操作结果:对图进行广度优先遍历。
在遍历过程中对每个顶点调用函数Visit一次且仅一次。
一旦visit()失败,则操作失败。
}ADT Graph其他的抽象数据类型定义如下:typedef struct{int number;float expenditure;int begintime[2];int arrivetime[2];}Vehide;typedef struct{Vehide stata[MAX_ROUTE_NUM];int last;}infolist;typedef struct ArcNode{int adjvex;struct ArcNode *nextarc;infolist info;}ArcNode;typedef struct VNode{char cityname[10];ArcNode *planefirstarc,*trainfirstarc;}VNode,AdjList[MAX_VERTEX_NUM]; typedef struct{AdjList vertices;int vexnum,planearcnum,trainarcnum;}ALGraph;typedef struct Node{int adjvex;int route;struct Node *next;}Node;typedef struct QNode{int adjvex;struct QNode *next;}QNode;typedef struct{QNode *front;QNode *rear;}LinkQueue;typedef struct TimeNode{int adjvex;int route;int begintime[2];int arrivetime[2];struct TimeNode *child[MAX_ROUTE_NUM]; }TimeNode,*TimeTree;struct arc{int co;char vt[10];char vh[10];int bt[2];int at[2];float mo;}a[MAX_ARC_SIZE];基本操作:void Administer(ALGraph *G);void cityedit(ALGraph *G);void CopyTimeTree(TimeTree p,TimeTree q);void createcityfile();void CreateGraph(ALGraph *G);void createplanefile();void CreateTimeTree(TimeTree p,int i,int j,LinkQueue *Q,infolist (*arcs)[MAX_VERTEX_NUM]);void createtrainfile();int DeleteplaneArc(ALGraph *G);void DeleteQueue(LinkQueue *Q,int *x);int DeletetrainArc(ALGraph *G);void DeleteVertex(ALGraph *G);void DemandDispose(int n,ALGraph G);void DestoryTimeTree(TimeTree p);void EnterplaneArc(ALGraph *G);void EnterQueue(LinkQueue *Q,int x);void EntertrainArc(ALGraph *G);void EnterVertex(ALGraph *G);void ExpenditureDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,float *M,int *final);void flightedit(ALGraph *G);void initgraph(ALGraph *G);void InitQueue(LinkQueue *Q);int IsEmpty(LinkQueue *Q);int LocateVertex(ALGraph *G,char *v);void MinExpenditure(infolist arcs,float *expenditure,int *route);void MinTime(infolist arcs,int *time,int *route);void PrintGraph(ALGraph *G);int save(ALGraph *G);void TimeDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1,int (*T)[2],int *final);void TimeTreeDispose(Node *head,infolist (*arcs)[MAX_VERTEX_NUM]);void trainedit(ALGraph *G);void TransferDispose(int k,infolist (*arcs)[MAX_VERTEX_NUM],ALGraph G,int v0,int v1); void UserDemand(ALGraph G);void VisitTimeTree(TimeTree p);主程序的流程以及各程序模块之间的调用关系三.详细设计1.主程序伪代码int main(){界面初始化;输入操作命令;While(“命令”!= “退出”){接受命令(用户输入要实现功能);进入各个处理命令函数;}}2.函数和过程的调用关系图四.调试分析:⑴调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析:在调试的过程中碰到了一下问题:a. 引用形参应用不当;b. 文件操作中遇到读入错误或找不到文件;解决方案:a. 对引用形参了解的不是很透彻,导致错误,通过查阅相关书籍如《C++ Primer》和请教编程能力较高的人,最终解决问题。