数据结构程序设计项目二:校园导游咨询

目录

问题描述

基本要求

测试数据

实现提示

获取实例

解决思路

逻辑设计


问题描述

设计一个校园导游程序,为来访的客人提供各种信息查询服务。

基本要求

(1) 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。

(2) 为来访客人提供图中任意景点相关信息的查询。

(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

测试数据

以江苏科技大学长山校区为例。


实现提示

一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网,顶点和边均含有相关信息.

获取实例

准备一张长山校区地图,并为不同地点进行编号

序号代表地点:

1:1号组团

2:2号组团

3:3号组团

4:4号组团

5:5号组团

6:6号组团

7:7号组团

8:西苑食堂

9:13号楼

10:14号楼

11:文理大楼

12:计算机学院

13:海韵湖

14:16号楼

15:文体中心

解决思路

无向图查找最短路径;

算法:Dijkstra算法

Dijkstra算法:是指定一个源点,Dijkstra算法是求以固定源点到某一个点的路径长度,也就是计算从源点到某一个顶点的最小路径,每次找路径末尾顶点的邻接点中权值最小的,(不像生成树,找整个生成树距离其他顶点权值最小的,Dijkstra是找末尾顶点距离哪个不在路径中顶点的权值最小) 从末尾顶点找到的不在路径中的顶点的最小权值的边,将边连接的顶点P加入路径集合,之后查看加入新的顶点之后源点到非路径中的顶点权值是否会减小,想计算到m顶点的权值,则让从源点经过p的权值, 再加上p到m的权值,就是源点到m的权值,用源点->p->m的权值和dist[m](表示还没加入顶点时候到m的权值)比较,如果这个权值小于dist[]数组中的,那就用这个权值更新dist[m], 并更改path[]数组,让path[m]=p;表示是经过p点到达m点.


逻辑设计

地点数据存储:S{}集合

描述:将是路径顶点集合在S中       

                              

路径数据存储:path[]数组

描述:用源点v初始化path数组 ,表示一开始都是从源点v到达各个顶点的距离。


 最短路径:一个dist[]数组

描述:存放的是到各个顶点的最小权值,必须从固定源点开始,  

目录 【1】校园导游咨询 程序设计源代码 及 截图 【2】停车场管理——方案一 程序设计源代码 及 截图 【3】停车场管理——方案 程序设计源代码 及 截图 【1】【【校园导游咨询】 (ps:该校园导游咨询系统没有输入值,所有信息是都在class MGraph的构造函数中传输的,且校园景点信息皆为【【上海电力学院】】景点信息。请大家注意,直接从文章copy到visual stutio中会出现中文字符,注意删除,推荐大家在一行语句的分号后面,点出光标,按一下delete键,然后按一下enter键,完成visual stutio的自动对齐,这样程序看起来一目了然,更易于操作和更改) 【问题描述】 设计一个校园导游程序,为来访的客人提供各种信息查询服务。 【基本要求】 (1)设计你所在学校的校园平面图,所含景点不少于10个。以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。 (2)为来访客人提供图中任意景点相关信息的查询。 (3)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一个最短的简单路径。 【选作内容】 (6)扩充每个景点的邻接景点的方向等信息,使得路径查询结果能提供详尽的导向信息。 **************************【以下为类的定义】******************************** #include #include using namespace std; const int MaxSize=18; const int INFINITY=65535;//最大值无穷 class direction; template class MGraph; template class VertexNode//定义头结点 { friend class MGraph; public: int vex;//顶点名称 T vexname;//顶点名称 T vexinf;//顶点信息 direction dir;//存放顶点方位信息的direction类的dir。 }; class direction { public: int ln;//存放在方向图中的横坐标,表示东西 int col;//存放在方向图中的纵坐标,表示南北 }; template class MGraph//定义无向图的邻接矩阵 { public: MGraph(); //构造函数,初始化具有n个顶点的图 void printvexname();//显示所有景点及景点代号 void printvexinf(int i);//显示代号为i景点的名称及信息 void printroad(int i,int j);//显示景点i~j的最短路径方案信息 void printdir(int i,int j);//显示景点i到j的方向信息,如“向东100m,向南200m” VertexNode adjlist[MaxSize]; //存放景点全部信息的 景点类数组 int vertexNum,arcNum; //图的顶点数和边数 void Root(int p,int q);//递归寻找pq间的最短路径 int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//创建Path和Dist分别存放两点间最短路径的前驱节点,两点间最短路径长度 int Line[MaxSize];//Line存放路径 int kkk;//Line[]数组的标记 private: T vertex[MaxSize]; //存放图中顶点的数组 int arc[MaxSize][MaxSize];//存放图中边的数组 }; *************************【以下为类的实现 即类函数的定义】*********************************** 详细程序及运行截图在文档中有,请下载~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值