数据结构课程设计——校园导游/校园导航/校园地图

写在前面

本人大一时写的数据结构课程设计。

里面还有一些bug。

例如,增加或者删除某个景点的时候,校园地图的仿真界面需手动修改,无法实现自动修改;未设计人行道,车道,景色等级等细节。Tarjan找关节点的算法未实现。(代码里面有Tarjan算法,没有写对)
注:
文件只设置了图书馆节点的详细信息,其他节点未设置。


题目要求

【问题描述】

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

【基本要求】

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

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

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

【实现提示】

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

【选作内容】

(1) 求校园图的关节点。

(2) 提供图中任意景点问路查询 , 即求任意两个景点之间的所有路径。

(3) 提供校园图中多个景点的最佳访问路线查询 , 即求途经这多个景点的最佳 ( 短 )路径。

(4) 校园导游图的景点和道路的修改扩充功能。

(5) 扩充道路信息 , 如道路类别 ( 车道、人行道等 ) 、沿途景色等级 , 以至可按客人所需分别查询人行路径或车行路径或观景路径等。

(6) 扩充每个景点的邻接景点的方向等信息 , 使得路径查询结果能提供详尽的导向信息。

(7) 实现校园导游图的仿真界面。


部分代码

函数声明

//----------------------------函数声明-------------------------------//
CpMap CreatMap();													//建图									
void Openning();													//初始菜单
void Manue_1();														//子菜单
void Print_Map();
void Operation_1();													//菜单功能1-5
void Operation_2(CpMap map);
void Operation_3(CpMap map);
void Operation_4(CpMap map);
void Operation_5(CpMap map);
void Operation_6(CpMap map);
void Operation_7(CpMap& map);
int Find_num(CpMap map,string*x, string y);							//找景点在邻接表中的下标(哈希思想)
int Input_Error1(int x);
int Input_Error2(int x, int y);										//景点名称输入错误报错提示
void LinkNode(int x, int y, CpMap& Map, int dis);					//连接两个顶点 无向图连接(a,b),(b,a)
void CreatEdge(CpMap* P_map);										//在地图上创建边
void Print(CpMap map);												//打印邻接表
void DFS(CpMap map, int x, int y);									//深度优先搜索 + 回溯
void Dijikstra(CpMap map, int x, int y);							
void Floyed(CpMap map);
void Floyed_Print(CpMap map, int x, int y);
void Tarjan(CpMap map, int x);										//Tarjan找关节点
void Delet_Edge(CpMap& map, int x, int y);							//删除边
int Distance[Maxx], Path_dij[Maxx], Visited[Maxx];					
int D_f[25][25], Path_f[25][25];
int Start, D[Maxx], Visited_DFS[Maxx], if_DFS[Maxx];
deque<int> Path;													//双向队列
int Dfn[Maxx], Low[Maxx], Par[Maxx], ap[Maxx];						//Dfn[] (时间戳)深搜得到的节点序列
int cnt, ans;														//Low[x]  顶点x的追溯值
queue<int> Tar;
int if_Floyed = 0;

部分功能展示

菜单

所有路径查询(两个节点之间)

void Operation_5(CpMap map) {
	string a, b;													//DFS
	cout << "请输入查询的两个景点(东田径场 玉壶山):";
	cin >> a >> b;
	int ai = Find_num(map, view_spot,a), bi = Find_num(map, view_spot,b);
	Start = ai;
	while (Input_Error2(ai, bi)) {									//判断是否输入错误
		cin >> a >> b;
		Start = ai = Find_num(map, view_spot,a);
		bi = Find_num(map, view_spot,b);
	}
	DFS(map, ai, bi);
}

实现思路大概 找对应需求所需的图论算法,写出来就好了。

代码里有详细注释,需要自取。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值