数据结构课程设计报告Word文档下载推荐.docx
《数据结构课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
查询道路信息(道路类别、沿途景色等)
查询任意两个景点之间的一条最短的简单路径
利用迪杰斯特拉或弗洛伊德算法确定最短路径
从某个景点出发给出访问所有景点的最佳行走方案
利用深度优先和广度优先搜索遍历图
地图信息的更新
基本信息的文件存储
查询任意两景点之间的所有简单路径
三、需求分析
现在大多数的旅游景区由于不断的扩张,这也就让游客参观景区遇到一些不便。
人们往往不熟悉景区里景点的分布,寻找想要参观的景点有些不便。
往往要花不少时间在这一方面。
然而要是有一个景区导游咨询系统这将给游客带来极大的方便,使人们一下就能找到所想要参观的景点。
功能:
这个导游咨询系统给用户提供了查看所有景点信息,查看景区平面图,查询景点信息,查询道路信息,寻找最短的方案到达目的地,遍历所有景点路径,给出两景点间所有的游览路线等功能。
实现目标:
实现故宫景区的导游咨询系统。
四、概要设计
1、方案设计
●系统分析
用的图的算法进行构造,用邻接表建立图,然后再用深度优先遍历进行搜索,查找所需的路径。
再用迪杰特斯拉算法求出两个景点之间的最佳路径。
●景区图
2、数据结构说明
typedefstructArcNode//弧信息
{
intdata;
ArcNode*nextarc;
}ArcNode;
typedefstructVexNode//顶点信息
charname[30];
//景点名称
intnum;
//景点编号
charintroduction[200];
//景点介绍
ArcNode*firstarc;
}VexNode,AdjList[MAX+1];
typedefstructedge
intweight;
//道路权值
charinfo[200];
//道路信息
}edge;
3、模块功能说明
●景点查询:
可以进行按编号查询。
当前输入非法时会进行提示,重新输入。
●道路查询:
输入道路两端景点编号进行查询。
●路径查询:
分为查询两点之间的所有路径、两点间的最短路径;
此外还有一个起点到其他所有点的路径查询及一个起点到其他所有点的最佳路径。
●全景图显示:
可以显示整个景区的一个简单地图。
五、详细设计及运行结果
1.功能函数的调用关系图;
2.各功能函数的程序流程图;
●CreateGraph()//创建图
●DFSTraverse()//遍历所有景点的路径
利用深度优先的思想,遍历图找出一条最佳最佳的的路径,让它遍历所有景点。
利用递归的思想,往下遍历,访问标志位,若访问过在下次就不用访问。
若找完一个分支在下次重新遍历。
●short_path()//最短路径
利用迪杰特斯拉算法,求v0到其余顶点的最短路径。
path[],distance[]是用来存放各路径的权值,借助辅助数组s[]标志,是否当前顶点属于s。
●search_all_path()//遍历出某一起点到终点的所有路径
利用图的深度优先遍历,利用访问标志位。
path[]记录路径,visited[]设访问标志,v起点,destination终点,length,代表的是访问景点的长度。
若碰见死路或者不同的路,则从上一个景点,从新扫描。
3.重点设计及编码。
●任意两个地点之间最短路径
voidDJS(AdjListG,intv0,intdistance[],intpath[])
{
int*s=newint[n];
//标志是否当前顶点属于S
intmin_distance=0,i=0,j=0,u=0;
for(i=1;
i<
=n;
i++)//初始化distance[],s[],path[]
{
distance[i]=GetWeight(v0,i);
s[i]=0;
if(i!
=v0&
&
distance[i]<
MAXEDGE)
path[i]=v0;
else
path[i]=-1;
//v0到v0为-1
}
s[v0]=1;
distance[v0]=0;
n;
i++)
{
min_distance=MAXEDGE;
intu=v0;
//把v0给u
for(j=1;
j<
j++)
{
if(!
s[j]&
distance[j]<
min_distance)
{
u=j;
min_distance=distance[j];
}
}
s[u]=1;
j++)//更新当前最短路径及距离
GetWeight(u,j)<
MAXEDGE)
intnew_distance=distance[u]+GetWeight(u,j);
if(new_distance<
distance[j])
{
distance[j]=new_distance;
path[j]=u;
//记录下寻找最短的路
}
}
}
}
voidshort_path(AdjListg)//求两点的最短路径
intbegin,end;
intdistance[MAX],path[MAX];
intminPath=0;
introad[MAX];
inti=0;
intpre=0;
printf("
\n"
);
请输入要查询的景点的起点,终点:
"
scanf("
%d%d"
&
begin,&
end);
DJS(g,begin,distance,path);
intw=end;
while(w!
=begin)//遍历path[]并把到终点的路存放在way[]中
i++;
road[i]=path[w];
w=path[w];
路径为:
for(intj=i;
j>
=1;
j--)
%s-->
g[road[j]].name);
%s"
g[end].name);
最短路径为%d"
distance[end]);
●任意一点出发遍历所有景点的路径
voidDFS(AdjListg,intv,intvisited[])
ArcNode*p;
intw;
visited[v]=1;
->
g[v].name);
p=g[v].firstarc;
while(p)
w=p->
data;
if(visited[w]==0)
DFS(g,w,visited);
p=p->
nextarc;
voidDFSTraverse(AdjListg)
intvisited[MAX+1];
intv,num,count=1;
for(v=0;
v<
v++)
visited[v]=0;
请输入你要开始的景点:
%d"
num);
while(count<
=n)
v=num;
if(visited[v]==0)
DFS(g,v,visited);
v++;
}
count++;
●任意两景点之间的全部简单路径
voidsearch_all_path(AdjListG,intpath[],intvisited[],intv,intdestination,intlength)
//利用深度优先遍历,path[]记录路径,visited[]设访问标志,v起点,destination终点,length代表的是访问景点的长度
if(visited[v])
return;
//若所有的景点都访问过,则终止
path[length-1]=v;
//开始记录路径
if(v==destination)
for(intm=0;
m<
length;
m++)
printf("
-->
G[path[m]].name);
printf("
else
visited[v]=1;
for(inti=1;
if(GetWeight(v,i)!
=MAXEDGE&
!
visited[i])
SearchAllPath(G,path,visited,i,destination,length+1);
3.运行结果。
选项菜单
查询任意两景点间最短的简单路径
浏览故宫全景图
查询任意点出发访问所有景点的路径
查看全部景点信息
查询任意道路信息
查询任意两点间的所有简单路径
六、调试情况,设计技巧及体会
1、测试数据
●菜单选择
非法数据测试:
●查看景点信息
合法数据测试:
●查看道路信息
●查看路径信息
2、对调试中主要问题进行总结
程序调试基本可以通过,主要问题在于对一些非法数据的识别处理。
所以调试过程中加入了非法数据的处理,增强的程序的健壮性。
3、对自己设计进行评价,指出合理和不足之处,提出改进的方案
首先感觉这次数据结构的课程设计完成的还不错,所要求的功能基本都完成了。
完成了基本信息的文件存储、图的初始化、景点信息的查询、道路信息的查询、路径的多种查询方式等。
人机交互人性化可行性较强,功能比较完善。
不足之处:
(1)查询时只能输入景点编号,不能通过名称进行查询;
(2)在给出所有路径后,没有给出一条最佳路径。
改进方案:
在查询时添加按名称查找功能;
通过改进算法,在给出所有路径后找出一条权值和最小的最佳路径。
4、在设计过程中的感受
通过这次数据结构的课程设计,让我更加深刻感觉到数据结构这么课程的重要性和学习这门课程的重要意义。
在以后的学习中我会不断复习巩固强化数据结构的学习,从而更好地掌握数据结构。
其次,通过这次数据结构课程设计也让我知道动手实践的重要性,想要学好编程就必须自己动手实践,只有不断动手实践才能不断提高。
在以后的学习中,我会加强动手实践,更好地掌握所学的知识。
七、源程序清单(略,详见电子版实验报告)