数据结构与OOP景区旅游信息管理系统.docx
《数据结构与OOP景区旅游信息管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构与OOP景区旅游信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构与OOP景区旅游信息管理系统
/*
15、景区旅游信息管理系统
【问题描述】
在旅游景区,经常会遇到游客打听从一个景点到另一个景点的最短路径和最短距离,这类游客不喜欢按照导游图的线路来游览,而是挑选自己感兴趣的景点游览。
为于帮助这类游客信息查询,就需要计算出所有景点之间最短路径和最短距离。
算法采用迪杰斯特拉算法或弗洛伊德算法均可。
建立一个景区旅游信息管理系统,实现的主要功能包括制订旅游景点导游线路策略和制订景区道路铺设策略。
任务中景点分布是一个无向带权连通图,图中边的权值是景点之间的距离。
(1)景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一个入口景点,建立一个导游线路图,导游线路图用有向图表示。
遍历采用深度优先策略,这也比较符合游客心理。
(2)为了使导游线路图能够优化,可通过拓朴排序判断图中有无回路,若有回路,则打印输出回路中的景点,供人工优化。
(3)在导游线路图中,还为一些不愿按线路走的游客提供信息服务,比如从一个景点到另一个景点的最短路径和最短距离。
在本线路图中将输出任意景点间的最短路径和最短距离。
(4)在景区建设中,道路建设是其中一个重要内容。
道路建设首先要保证能连通所有景点,但又要花最小的代价,可以通过求最小生成树(,克鲁斯卡尔)来解决这个问题。
本任务中假设修建道路的代价只与它的里程相关。
【基本要求】
本任务应有如下功能模块:
创建景区景点分布图;
输出景区景点分布图(邻接矩阵)
输出导游线路图;深度优先策略
判断导游线路图有无回路;拓朴排序(查找入度大于1的景点)
求两个景点间的最短路径和最短距离;弗洛伊德算法
输出道路修建规划图。
主程序用菜单选项供用户选择功能模块。
*/
论文内容包括:
一、 课程设计题目:
二、 课程设计内容:
三、 算法设计:
四、 程序正确性验证(指边界测试数据,即程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足要求的结果):
五、 课程设计过程中出现的主要问题、原因及解决方法:
六、 课程设计的主要收获:
七、 对今后课程设计的建议:
代码:
<>
;
<>
<>清屏函数头文件
M100
999666333
/**函数声明**/
()欢迎界面
()返回主界面函数
()主界面
()创建景区景点图
()输出景区景点图
()导游线路
(c)深度优先搜索导游线路
()检查是否存在一个合法的景区景点分布图
()打印景点编号与景点名称的对应信息
(A[M][M][M][M])算法
()选项判断函数
()判断回路
/**定义数据结构**/
{
m[M][M]景点邻接矩阵
[M]各个景点的名称
};
{
景区名称
景点总数量
道路数量
邻接矩阵
};
/**景区数据类型为全局变量**/
S;
/***************************/
创建一个景区邻接矩阵
()
{
(>0)
{
<<"\n*当前已存在一个景区景点分布图!
\n*继续操作将覆盖该景区景点分布图!
()";
();
}
<<"\n*请输入景区的名称:
";
>>;
<<"\n*请输入该景区的景点总数目:
";
>>;
<<"\n*请输入景区的道路总数目:
";
>>;
;
(0<)
{
(0<)
{
[i][j]=0;
}
}
<<"\n*请输入道路两边连接的两个景点编号、名称及道路的长度\n";
<<"\t(格式:
景点输入请按照小号在前大号在后的原则,景点编号从1开始)";
(0<)
{
<<"\n*第"<<1<<"条道路\n";
n12;
编号输入从1开始,矩阵下标从零开始
<<"\景点1编号:
";
>>n1;
n1;
<<"\景点1名称:
";
>>[n1];
<<"\景点2编号:
";
>>n2;
n2;
<<"\景点2名称:
";
>>[n2];
<<"\两景点之间的道路长度:
";
>>[n1][n2];
[n2][n1][n1][n2];
}
<<"\n*景区创建成功!
";
();
}
()以邻接矩阵的形式输出景点分布
{
();
<<"\n*景区景点分布图(邻接矩阵表示)查询成功!
\n";
<<"*景区名称:
"<<<<;
;
<<"\n\t";
(0<)
{
<<"";
}
<<;
<<"\编号|";
<<"|"
(0<)
{
<<''<<1<<'';
}
<<'|'<<<<"\";
(0<)
{
<<"";
}
<<'|'<<;
(0<)
{
(0<)
{
(0)
{
<<"\"<<1<<"|"<<[i][j]<<'';
}
{
<<''<<[i][j]<<'';
}
}
<<'|'<<;
}
<<"\t";
(0<)
{
<<"";
}
();
<<"注:
\n\t'0'表示两个景点间没有直接到达的路径,或景点到自身路径不需要!
\n";
();
}
/********/
深度优先搜索导游线路
[M]={0};
0找到的景点个数
p[M]表示各个景点的入度值
(c)
{
;
p[c];
()
{
<<[c]<<;
();
}
<<[c]<<">";
[c]=1;
(0<)
{
([c][i]>0[i]0)
{
(i);
(>)
{
<<[c]<<">";
p[c];
}
}
}
()();
}
()导游线路
{
();
<<"\n*请输入起始景点的景点编号:
";
c;
>>c;
;
(0<)
{
[i]=0;
p[i]=0入度置初值为0
}
0;
<<"*形成的导游线路图(采用深度优先策略)如下所示:
\n\n\t";
(c);
}
/********/
()判断回路
{
();
(0)
{
<<"\n*缺少合法的导游线路图!
\n*请先生成一个合法的导游线路图!
\n";
();
}
;
(0<)
{
(p[i]>1)
{
(f)
{
<<"\n*该导游线路图存在回路\n线路中的重复走过的景点显示如下:
\n\t";
;
}
<<"编号:
"<<1<<","<<"景点名称:
"<<[i]<<;
}
}
(f)
{
<<"\n\t*未找到存在于该导游线路图中的回路。
\n";
}
();
}
(A[M][M][M][M])
{
;
(0<)
{
(0<)
{
([i][j]0)
A[i][j];
()
A[i][j]=0;
A[i][j][i][j];
([i][j]<)
[i][j];
[i][j]1;
}
}
/*
(0<)
{
(0<)
{
<<[i][j]<<'';
}
<<;
}
*/
(0<)
{
(0<)
{
(0<)
{
(A[i][j]>A[i][k][k][j])
{
A[i][j][i][k][k][j];
[i][j][k][j];
}
}
}
}
/*
(0<)
{
(0<)
{
<<[i][j]<<'';
}
<<;
}
*/
}
/********/
()最短路径、距离
{
();
A[M][M][M][M];
[M][M];
A[M][M];
();
()
{
("");
();
;
[M];
<<"*请输入要查询的最短路径和最短距离的两个景点的编号:
\n";
<<"\景点1:
";
>>i;
;
<<"\景点2:
";
>>j;
;
(A[i][j]<)
{
<<"\n*从"<<[i]<<"到"<<[j]<<"的最短路径为:
";
[i][j];
0[d];
(1)
{
[d];
[i][k];
}
[d];
<<[[d]];
<<[d];
(1>=0)
{
<<">"<<[[s]];
<<','<<[s];
}
<<",最短距离为:
"<}
()
{
<<"\n*景点编号输入不合法!
\n";
}
{
<<"\n*这两个景点间不存在路径\n";
}
<<"\n是否继续执行最短路径和最短距离的查询()";
();
}
();
}
()道路修建规划图、最小生成树(算法)
{
();
<<"\n*道路修建规划图(算法)规划如下:
\n";
[M][M]000;
A[M][M];
(0<)
{
(0<)
{
([i][j]0)
A[i][j];
()
A[i][j]=0;
A[i][j][i][j];
}
}
(0<)
{
[i][v][i];
[i];
}
(1<)
{
;
(0<)
{
([j]0[j]<)
{
[j];
;
}
}
(<)
{
<<"\第"<<<<"条路:
从"<<[[k]]<<"到"<<[k]<<",该条道路长度为:
"<<<<;
;
}
[k]=0;
(0<)
{
(A[k][j]0[k][j]<[j])
{
[j][k][j];
[j];
}
}
}
<<"*修建道路的总长度为:
"<<<<;
();
}
()主界面
{
("");
<<"\n主菜单:
\n";
<<"\t1、创建景区景点分布图;\n";
<<"\t2、输出景区景点分布图(邻接矩阵);\n";
<<"\t3、输出导游线路图;\n";
<<"\t4、判断导游线路图有无回路;\n";
<<"\t5、求两个景点间的最短路径和最短距离;\n";
<<"\t6、输出道路修建规划图;\n";
<<"\t0、退出。
\n";
<<"\n*请输入操作选择:
";
c;
();
<(!
(c>='0'<='6'))
{
<<"*输入有误,请重新输入:
";
();
<}
(c)
{
'1':
();
'2':
();
'3':
()导游线路
'4':
()判断回路
'5':
()最短距离
'6':
()最小生成树
'0':
<<"\n\t\t\t*按任意键关闭本系统*\n";
(0);
}
}
()
{
<<"\n\t\t\t按任意键返回主菜单......";
();
("");
();
}
()
{
<<"\n\n\t\t******欢迎使用景区旅游信息管理系统******\n\n";
<<"\t\t\t按任意键进入系统......";
();
();
}
()
{
("");
(<=1)
{
<<"\n*缺少合法的景区景点分布图!
\n*请先创建一个合法的景区景点分布图!
\n";
();
}
}
()
{
<<"\n*编号对应景点名称:
\n";
(0<)
{
<<"\t"<<1<<":
"<<[i]<<;
}
}
()
{
;
(())
{
('Y''y')
{
<<<<;
;
}
('N''n')
{
<<<<;
();
}
}
}
()
{
();
0;
}