目录
一、问题描述及基本要求
【问题描述】
设计一个校园导游程序,为来访的客人提供各种信息查询服务。
【基本要求】
(1) 设计你所在学校的校园平面图,所含景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介 等信息;以边表示路径,存放路径长度等相关信息。
(2) 为来访客人提供图中任意景点相关信息的查询。
(3) 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
【测试数据】
以江苏科技大学长山校区为例。
【实现提示】
一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网,顶点和边均含有相关信息.
二、问题分析和任务定义
1.通过分析该问题的第一个任务就是自己根据校园平面图选定建筑构造无向图,同时自己也要确定他的相应的权值。
2.给出无向图之后要给出一个合理的算法算出任意两个景点之间的最短路径。
3.将最短路径给出来。
4.给出各个地点的介绍
三、逻辑设计
首先我们给出学校的鸟瞰图:
这里我们给出选定的地点:
给出鸟瞰图中大致的位置关系和邻接关系:
给出对应的无向图在这里为了方便表示用字母代替地点:
无向图(由于电脑上不知道用什么软件做无向图所以手绘一张,丑,可以喷):
之后就是变量的定义:
- 1、用A[10][10]表示邻接矩阵用
- 2、b[10][10]表示最短路径的直接后继。
- 函数的定义:
- 1、Prim()进行初始化;
- 2、Flo()进行求出最终的A[10][10]和b[10][10];
- 3、search()进行查找;
- 4、main()进行调用。
算法的使用:这里我使用的是Floyd算法,他的思想是用0-n-1的中间序号点依次的取之间距离的最小值,即:A[i][j]=min{A[i][j],A[i][k]+A[k][j]};十分有意思的是他这里是把每一次的结果作为下一次计算的基础,十分想记忆化递归大大的减少了计算量,也使处理更加简单。在第n-1次处理过之后得到的最终的A[i][j]就是i,j两个地点之间最短的距离。在同时用p[i][j]进行后继追踪,找出路径。需要注意的是在处理非邻接关系的权值时要用一个MAX来处理,这里最多就1100,所以可以选择为10000;
四、物理设计
- int A[10][10];
- int b[10][10];
- sting c[10];
- Prim()初始化;
- Flo()进行求出最终的A[10][10]和b[10][10];
- search()进行查找;
- main()进行调用。