校园导航实验报告.docx
《校园导航实验报告.docx》由会员分享,可在线阅读,更多相关《校园导航实验报告.docx(11页珍藏版)》请在冰豆网上搜索。
校园导航实验报告
计算机工程学院
课程设计报告
课程名称:
数据结构课程设计
设计题目:
校园导航问题
院系:
计算机工程学院
专业:
计算机科学与技术
组别:
学生姓名:
学号:
起止日期:
2011年12月26日~2012年1月3日
指导教师:
目录
1需求分析1
2.1课程设计(实践周)题目1
2.2课程设计(实践周)任务及要求1
2.3课程设计(实践周)思想1
2.4软硬件运行环境开发工具1
2概要设计1
2.1本课题设计所用数据结构1
2.2本课题主要设计思想2
3代码设计2
4调试与操作说明8
5总结8
6致谢8
7参考文献8
8指导老师评语9
1需求分析
1.1课程设计(实践周)题目
设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同。
找出从任意场所到达另一场所的最佳路径(最短路径)。
本课题实现校园多个场所(至少10个)的最短路径的求解。
1.2课程设计(实践周)任务及要求
设计要求:
主要的功能有:
1)景点显示(显示景点的编号、名称以及简介)
2)最短路径求解(求一点到所有点之间的路径及长短,求始终两点之间的路径及长短)。
3)景点查找(有选择的查找你所想了解的景点)
1.3课程设计(实践周)思想
按照题目要求,将代码分为三个结构体和三个主要函数
1.4运行环境以及开发工具
Windows2000以上操作系统
VisualC++6.0以上编译环境
2概要设计
2.1本课题设计所用数据结构
本课题主要用到的是struct类以及图论里面的迪杰斯特拉算法和弗洛伊德算法
2.2本课题主要设计思想
1)淮阴工学院景点省略图
2)结构图
3代码设计
迪杰斯特拉算法:
voidShortestPath_DIJ(MGraph*G)
{
intv,w,i,min,t=0,x,flag=1,v0;
intfinal[40],D[40],p[40][40];
cout<<"┏━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓"<cout<<"┃编号┃景点名称┃简介┃"<for(v=0;v<10;v++)
{
cout<<"┃"<view[v].num<view[v].name<view[v].instruction<}
for(v=10;vvexnum;v++)
{
cout<<"┃"<view[v].num<view[v].name<view[v].instruction<}
cout<<"┗━━┻━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━┛"<while(flag==1)
{
cout<<"请输入一个起始景点编号:
";
cin>>v0;
if(v0<0||v0>G->vexnum)
{
cout<<"景点编号不存在!
请重新输入景点编号:
";
cin>>v0;
}
if(v0>=0&&v0vexnum)
{
flag=0;
}
}
for(v=0;vvexnum;v++){
final[v]=0;
D[v]=G->l[v0][v].d;
for(w=0;wvexnum;w++)
{
p[v][w]=0;
}
if(D[v]{
p[v][v0]=1;p[v][v]=1;
}
}
D[v0]=0;final[v0]=1;
for(i=1;ivexnum;i++)
{
min=INFINITY;
for(w=0;wvexnum;w++)
{
if(!
final[w])
{
if(D[w]v=w;
min=D[w];
}
}
}
final[v]=1;
}
for(w=0;wvexnum;w++)
{
if(final[w]!
=0&&(min+G->l[v][w].d{
D[w]=min+G->l[v][w].d;
for(x=0;xvexnum;x++)
p[w][x]=p[v][x];
p[w][w]=1;
}
}
for(v=0;vvexnum;v++)
{
if(v0!
=v)
{
cout<view[v0].name;
}
for(w=0;wvexnum;w++)
{
if(p[v][w]==1&&w!
=v0)
{
cout<<"-->"<view[w].name;
}
t++;
}
if(t>G->vexnum-1&&v0!
=v)
{
cout<<"总路线长"<}
}
}
弗洛伊德算法:
voidFloyd(MGraph*G)
{
intv,u,i,w,k,j,flag=1,p[40][40][40],D[40][40];
cout<<"┏━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┓"<cout<<"┃编号┃景点名称┃简介┃"<for(v=0;v<10;v++)
cout<<"┃"<view[v].num<view[v].name<view[v].instruction<for(v=10;vvexnum;v++)
cout<<"┃"<view[v].num<view[v].name<view[v].instruction<cout<<"┗━━┻━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━┛"<for(v=0;vvexnum;v++)
{
for(w=0;wvexnum;w++)
{
D[v][w]=G->l[v][w].d;
for(u=0;uvexnum;u++)
{
p[v][w][u]=0;
}
if(D[v][w]{
p[v][w][v]=1;p[v][w][w]=1;
}
}
}
for(u=0;uvexnum;u++)
{
for(v=0;vvexnum;v++)
{
for(w=0;wvexnum;w++)
{
if(D[v][u]+D[u][w]{
D[v][w]=D[v][u]+D[u][w];
for(i=0;ivexnum;i++)
{
p[v][w][i]=p[v][u][i]||p[u][w][i];
}
}
}
}
}
while(flag==1)
{
cout<<"请输入出发点和目的地的编号(用空格隔开):
";
cin>>k>>j;
if(k<0||k>G->vexnum)
{
cout<<"景点编号不存在!
请重新输入出发点和目的地的编号:
";
cin>>k>>j;
}
if(k>=0&&kvexnum)
flag=0;
}
cout<view[k].name;
for(u=0;uvexnum;u++)
{
if(p[k][j][u]&&k!
=u&&j!
=u)
{
cout<<"-->"<view[u].name;
}
}
cout<<"-->"<view[j].name;
cout<<"总路线长"<}
4调试与操作说明
调试过程中不存在问题。
操作包括如下几个步骤:
程序刚运行时跳出的功能主菜单;
输入选项1后,会跳出所有景点的序列号,名称以及简介并循环主菜单功能图
输入选项2后,会跳出查询所有路线功能的起始界面,会让你输入你所在的起点所能到达的所有地方
输入选项3后,会跳出让你选择起始点和出发点的功能的起始界面,让你输入起始点和出发点
输入选项4后,会跳出景点的名称与序号对应列表,并让你输入你所想了解的景点信息
总结
这次课程设计的成功,不单单是解决的课程设计这问题,更多的是掌握了许多宝贵的实践经验,这才是学习最重要的一部分。
致谢
谢谢所有在这次课程设计中帮助过我、协助过我的老师和朋友,谢谢。
参考文献
1、吴乃陵,况迎辉《C++程序设计(第2版)》高等教育出版社2006
2、BruceEckel《C++编程思想》机械工业出版社2000
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1、设计过程中出勤、学习态度等方面
0.2
2、课程设计(实践周)质量与答辩
0.5
3、设计报告书写及图纸规范程度
0.3
总成绩