1 课题描述
设计一个校园导游程序,为来访的客人提供各种信息查询服务。查询服务有:提供任意景点的信息,提供任意两点之间的最短路径,提供任意景点之间的所有路径,提供多个景点之间的最佳访问路径。
2 问题分析和任务定义
任务要求:
1、 设计你的学校的校园平面图,所含景点10-15个。以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
2、 为来访客人提供图中任意景点相关信息的查询。
3、 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
4、 提供图中任意景点问路查询,即求任意两个景点之间的所有路径。
5、 提供校园图中多个景点的最佳访问路线查询,即求途经这多个景点的最佳路径。
6、 区分汽车线路与步行线路。
7、 设计一实用的查询界面和功能菜单。
3 逻辑设计
根据高德地图获得山东工商学院的平面图,根据平面图抽象出各个景点以及其大体距离和位置关系。
4 详细设计
景点图的结构体:
struct vertex///景点信息结构体
{
int num;///景点编号
char name[20];///景点名称
char info[300];///景点介绍
};
struct maps
{
int n;///点数
int m;///边数
vertex v[M];
int edgs[M][M];///邻接矩阵
} ; ///景点图的结构体
<1>获得景点信息函数:void Creat_vertex()
将各个景点对应的信息存入景点信息结构体数组中。
<2>生成图和邻接矩阵函数: void Creat_maps()
将获得的景点信息构成邻接矩阵来存图。
<3>查询景点信息函数:void Search_info()
通过选择菜单,查询任意一个景点的信息。
<4>多源最短路弗洛伊德算法:void Floyd()
通过弗洛伊德算法实现任意一点到n-1点最短路的建立。
<5>打印最短路径函数:void Floyd_print(int s, int e)
回溯弗洛伊德算法打印从s点到e点的最短路径经过的点,并统计所走的总路程。
<6>打印两点之间所有路径函数:void Dfs_allpath(int s,int e)
通过DFS深度优先搜索打印从s点到e点的所有路径。
<7>提供多景点之间最佳路径函数:void Bestpath_Multispot()
打印多个景点之间的最短路径,并统计所要走的总路程。
5 程序编码
#include<cstdio> #include<cstring> #include<algorithm> #include<stack> #define INF 999999 #define M 20 int dist[M][M];///距离 int path[M][M];///路径 int Stack[M];///路径栈 int top;///栈顶 int counts;///记录路径数 int visited[M];///标记数组 using namespace std; struct vertex///景点信息结构体 { int num;///景点编号 char name[20];///景点名称 char info[300];///景点介绍 }; struct maps { int n;///点数 int m;///边数 vertex v[M]; int edgs[M][M];///邻接矩阵 } g; ///景点图的结构体 void Creat_vertex() { g.v[0].num=1; strcpy(g.v[0].name,"教职工家属楼"); strcpy(g.v[0].info,"这是学校老师职工的家属楼"); g.v[1].num=2; strcpy(g.v[1].name,"大学生活动中心"); strcpy(g.v[1].info,"这是举办文艺活动的场所"); g.v[2].num=3; strcpy(g.v[2].name,"餐饮区"); strcpy(g.v[2].info,"这里集中着学校的三大餐厅,物美价廉"); g.v[3].num=4; strcpy(g.v[