- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
交通咨询系统设计—课程设计实验报告精选
数学与统计学院
课程名称:《算法与数据结构》
设计题目: 交通咨询系统设计
交通咨询系统设计
1.系统的设计要求
问题的描述
根据不同目的的旅客对交通工具的不同要求。例如,因公出差的旅客希望在旅途中的时间尽可能短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。编制一个全国城市之间的模拟交通咨询的程序,为旅客提供两种或者三种最优决策的交通咨询。
需求分析
1)提供对城市信息进行编辑(如:添加或删除)的功能。
(2)城市之间有两种交通工具:火车和飞机。提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。
(3)提供两种最优决策:最快到达或最省钱到达。全程只考虑一种交通工具。
(4)旅途中耗费的总时间应该包括中转站的等候时间。
(5)咨询以用户和计算机的对话方式进行。由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。
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:
CreateGraph70405(G , V , VR);
初始条件:V是图的顶点集,VR是图的弧的集合。
操作结果:按V和VR的定义构造图G。
Initgraph70405(G);
初始条件:图G存在。
操作结果:各个变量初始化。
LocateVex70405G,u);
初始条件:图G存在,u和G中顶点具有相同的性质。
操作结果:若图中存在顶点u,则返回该顶点在图中的位置;否则返回其他信息。
Cityedit70405(G);
初始条件:图G存在。
操作结果:对城市进行编辑。
EnterVertex70405(G);
初始条件:图G存在。
操作结果:增加城市。
UserDemand70405(ALGraph G);
初始条件:图G存在。
操作结果:显示选择项目。
MinExpenditure70405(arcs,expenditure,route);
初始条件:图G存在。
操作结果:从一个顶点到另一个顶点的最少钱数。
MinTime70405( arcs,time,route);
初始条件:图G存在。
操作结果:从一个顶点到另一个顶点的最短时间。
DeleteVex70405(G,v);
初始条件:图G存在,v是G中某个顶点。
操作结果:删除G中顶点v以及相关的弧。
}ADT Graph
系统模块图如下:
3 详细设计
图的邻接表存储结构表示如下:
#include MAX_VERTEX_NUM 20
typedef struct ArcNode{ //弧的结构
int adjvex;//该弧所指向的顶点的位置
struct ArcNode *nextarc;//指向下一个弧的指针
infoType *info;//该弧相关信息的指针
}ArcNode;
typedef struct VNode{//顶点结构
vertextype data;//顶点信息
Arcnode *firstarc;//指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct {//图的结构
AdjList vertices;
int vexnum ,arcnum;//图的当前顶点数和弧数
int kind;//图的种类标志
}ALGraph;
//队列的链式存储结构
typedef struct QNode
{
int adjvex;
struct QNode *next;
}QNode;
typedef struct
{
QNode *front;//对头指针。
QNode *rear;//队尾指针。
}LinkQueue;
主界面操作:
int main()
{
界面初始化;
输入操作命令;
While(“命令” != “退出”)
{
接受命令(用户输入要实现功能);
文档评论(0)