数据结构课程设计故宫导游最短路径.docx
- 文档编号:25597917
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:33
- 大小:265.07KB
数据结构课程设计故宫导游最短路径.docx
《数据结构课程设计故宫导游最短路径.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计故宫导游最短路径.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计故宫导游最短路径
数学与计算机学院
课程设计说明书
课程名称:
数据结构与算法课程设计
课程代码:
6014389
题目:
故宫导游咨询
年级/专业/班:
学生姓名:
学 号:
开始时间:
2011年12月9日
完成时间:
2011年12月23日
课程设计成绩:
学习态度与平时成绩(30)
技术水平与实际能力(20)
创新(5)
说明书(计算书、图纸、分析报告)撰写质量(45)
总分(100)
指导教师签名:
年月日
摘要
随着计算机的普与,涉与计算机相关的科目也越来越普遍,其中数据结构是计算机专业重要的专业基础课程与核心课程之一,为适应我国计算机科学技术的发展和应用,学好数据结构非常必要,然而要掌握数据结构的知识非常难,所以对“数据结构”的课程设计比不可少。
本说明书是对“故宫导游咨询”课程设计的说明。
首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。
其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以与各程序模块之间的层次关系,以与ADT描述。
然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以与函数的功能与代码实现。
再次是对系统的调试分析说明,以与遇到的问题和解决问题的方法。
然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。
关键词:
计算机、课程设计、数据结构
引言
数据结构是计算机专业重要的专业基础课程与核心课程之一,在计算机领域应用广泛,计算机离不开数据结构。
数据结构课程设计为了能使我们掌握所学习的知识并有应用到实际的设计中的能力,对于掌握这门课程的学习方法有极大的意义。
本课程设计的题目为“故宫导游咨询”,完成相应的录入信息、查找、修改、删除、计算功能等等。
本课程设计采用的编程环境为MicrosoftVisualStdio6.0。
1、需求分析
游客游览某一景点时,对景点都不熟悉。
特别是对于象故宫这样的大型景点,如果随便参观的话,可能会错过一些景点,也可能走许多冤枉路。
为了方便游客,需要一套软件系统,能够为游客提供:
查询景点信息,给出到某个景点的最佳路线,给出到所有景点的最佳路线。
为系统管理员提供以下功能:
添加和撤销景点,添加和撤销旅游线路,修改景点信息。
1.1任务与分析
此系统要完成对故宫景点信息的储存、修改、删除、添加和查询最短路线,因为涉与到最短路线问题,所以数据结构优先考虑采用图的邻接矩阵储存结构,
景点和旅游线路可以构成图状结构,景点作为图的顶点,旅游线路作为图的边,边上的权值作为景点间的距离。
此结构便于完成任务的各种操作。
1.2测试数据
图1测试数据
2概要设计
2.1ADT描述
ADTGraph{
数据对象:
D{故宫景点和路径}
数据关系:
R={VR}
VR={
基本操作:
voidCreat();//录入景点和路径的信息。
voidselect();//查找某景点的信息。
voidxiugai();//修改某景点的信息。
voidinsert();//插入新的景点和路径信息。
voiddelet();//删除景点和路径信息。
voidshortpath1();//查询到某景点的最短路径。
voidshortpath2();//查询到所有景点的最短路径。
Voidmain();//主函数。
}
2.2程序模块结构
图2程序模块结构
2.2.1结构体定义
景点的结构体定义如下:
structding
{
stringdingdian;
stringxinxi;
}
2.3 各功能模块
录入模块:
voidCreat()录入景点和路径的信息,并储存。
查询景点模块:
voidselect()查找某景点的信息。
修改模块:
voidxiugai()修改某景点的信息。
插入模块:
voidinsert()插入新的景点和路径信息。
删除模块:
voiddelet()删除景点和路径信息。
查询到某景点最佳路径:
voidshortpath1():
查询到某景点的最短路径。
查询到查询到所有景点的最短路径:
voidshortpath2()查询到所有景点的最短路径
3 详细设计
3.1结构体定义
景点的结构体定义如下:
structding
{
stringdingdian;
stringxinxi;
}
3.2初始化
构造函数初始化变量:
Graph:
:
Graph()
{
for(inti=0;i Vertices[i].dingdian="0"; for(i=0;i for(intj=0;j { if(i==j) Edge[i][j]=0; else Edge[i][j]=MAXweight; } numE=0; numV=0; } 3.3插入操作 插入路径和景点信息: voidGraph: : insert() { inti,vi,vj,w,x,y; cout<<"输入添加路径的条数和景点数: "; cin>>x>>y; cout<<"输入添加景点名称: "< for(i=0;i { cout< "; cin>>Vertices[numV+i].dingdian; cout<<""<<"景点信息: "; cin>>Vertices[numV+i].xinxi; cout<<"添加成功! "< } for(i=0;i { cout<<"输入添加景点到景点的路径的长度(vi,vj,length): "; cin>>vi>>vj>>w; Edge[vi-1][vj-1]=w; Edge[vj-1][vi-1]=w; cout<<"添加成功! "< } numE=x+numE; numV=y+numV; } 3.4、录入信息 voidGraph: : Creat() { inti,vi,vj,w; cout<<"输入路径的条数数和景点数: "; cin>>numE>>numV; cout<<"输入景点名称: "< for(i=0;i { cout< "; cin>>Vertices[i].dingdian; cout<<"景点信息: "; cin>>Vertices[i].xinxi; } for(i=0;i { cout<<"输入景点到景点的路径的长度(vi,vj,length): "; cin>>vi>>vj>>w; Edge[vi-1][vj-1]=w; Edge[vj-1][vi-1]=w; } } 3.5修改操作 voidGraph: : xiugai() { stringa,c; intb=0; cout<<"请输入要修改的景点: "; cin>>a; for(inti=0;i if(Vertices[i].dingdian==a) { cout<<"请重新输入景点信息: "; cin>>c; Vertices[i].xinxi=c; b++; cout<<"修改成功! "< } if(b==0) cout<<"不存在该景点! "< } 3.6查询操作 voidGraph: : select() { stringa; intb=0; cout<<"请输入要查询的景点: "; cin>>a; for(inti=0;i if(Vertices[i].dingdian==a) { cout< b++; } if(b==0) cout<<"不存在该景点! "< } 3.7删除操作 voidGraph: : delet() { intx,y,z,k,v; cout<<"请你输入要撤销景点数和路线条数: "; cin>>k>>z; for(intj=0;j { cout<<"请输入要撤销的景点编号: "; cin>>v; for(inti=0;i { if(i! =v-1) { Edge[v-1][i]=MAXweight; Edge[i][v-1]=MAXweight; } } cout<<"撤销成功! "< } for(inti=0;i { cout<<"请输入要撤销的旅游路线的景点编号(vi,vj): "; cin>>x>>y; if(Edge[x-1][y-1]! =MAXweight) { Edge[x-1][y-1]=MAXweight; Edge[y-1][x-1]=MAXweight; cout<<"撤销成功! "< numE--; } else cout<<"不存在该路线! "< } } 3.8求到某一景点的路径 voidGraph: : shortpath1() { intv,v1; stringb,c; cout<<"输入你所在的景点: "; cin>>b; cout<<"输入你所要去的景点: "; cin>>c; for(inti=0;i if(Vertices[i].dingdian==b) v=i; for(i=0;i if(Vertices[i].dingdian==c) v1=i; for(i=0;i { dist[i]=Edge[v][i]; s[i]=0; if(i! =v&&dist[i] path[i]=v; else path[i]=-1; } s[v]=1; dist[v]=0; for(i=0;i { floatmin=MAXweight; intu=v; for(intj=0;j if(! s[j]&&dist[j] { u=j; min=dist[j]; } s[u]=1; for(intw=0;w if(! s[w]&&Edge[u][w] { dist[w]=dist[u]+Edge[u][w]; path[w]=u; } } for(i=0;i { if(i! =v&&i==v1&&dist[i]! =MAXweight) { stringc[10]; intj=0; intk=i; cout<<"从"< cout<<"最佳路径长度为: "; cout< cout<<"大约需要走"< cout<<"路径为: "; do{ j++; c[j]=Vertices[k].dingdian; k=path[k]; } while(k! =v); j++; c[j]=Vertices[k].dingdian; for(intn=j;n>=1;n--) { cout< if(n! =1) cout<<"-->"; } cout< } } } 3.9求到所有景点的路径 voidGraph: : shortpath2() { intv; stringb; cout<<"输入你所在的景点: "; cin>>b; for(inti=0;i if(Vertices[i].dingdian==b) v=i; for(i=0;i { dist[i]=Edge[v][i]; s[i]=0; if(i! =v&&dist[i] path[i]=v; else path[i]=-1; } s[v]=1; dist[v]=0; for(i=0;i { floatmin=MAXweight; intu=v; for(intj=0;j if(! s[j]&&dist[j] { u=j; min=dist[j]; } s[u]=1; for(intw=0;w if(! s[w]&&Edge[u][w] { dist[w]=dist[u]+Edge[u][w]; path[w]=u; } } for(i=0;i { if(i! =v&&dist[i]! =MAXweight) { stringc[10]; intj=0; intk=i; cout<<"从"< cout<<"最佳路径长度为: "; cout< cout<<"大约需要走"< cout<<"路径为: "; do{ j++; c[j]=Vertices[k].dingdian; k=path[k]; } while(k! =v); j++; c[j]=Vertices[k].dingdian; for(intn=j;n>=1;n--) { cout< if(n! =1) cout<<"-->"; } cout< } } } 3.10求到所有景点的路径 voidGraph: : shortpath2() { intv; stringb; cout<<"输入你所在的景点: "; cin>>b; for(inti=0;i if(Vertices[i].dingdian==b) v=i; for(i=0;i { dist[i]=Edge[v][i]; s[i]=0; if(i! =v&&dist[i] path[i]=v; else path[i]=-1; } s[v]=1; dist[v]=0; for(i=0;i { floatmin=MAXweight; intu=v; for(intj=0;j if(! s[j]&&dist[j] { u=j; min=dist[j]; } s[u]=1; for(intw=0;w if(! s[w]&&Edge[u][w] { dist[w]=dist[u]+Edge[u][w]; path[w]=u; } } for(i=0;i { if(i! =v&&dist[i]! =MAXweight) { stringc[10]; intj=0; intk=i; cout<<"从"< cout<<"最佳路径长度为: "; cout< cout<<"大约需要走"< cout<<"路径为: "; do{ j++; c[j]=Vertices[k].dingdian; k=path[k]; } while(k! =v); j++; c[j]=Vertices[k].dingdian; for(intn=j;n>=1;n--) { cout< if(n! =1) cout<<"-->"; } cout< } } } 3.11主函数 voidmain() { Grapha; for(;;) { charc; system("cls"); cout<<"******************************"< cout<<"******登录! ******"< cout<<"******************************"< cout<<"******A、管理员******"< cout<<"******B、游客******"< cout<<"******C、退出******"< cout<<"******请选择(A、B、C)******"< cout<<"******************************"< cin>>c; if(c=='A') { intd; charb; cout<<"请输入密码: "; cin>>d; if(d==123) { for(;;) { system("cls"); cout<<"********************************"< cout<<"***欢迎登陆故宫管理系统***"< cout<<"********************************"< cout<<"***A、录入景点和路径信息***"< cout<<"***B、修改景点信息***"< cout<<"***C、插入景点和路径***"< cout<<"***D、删除景点和路径***"< cout<<"***E、退出***"< cout<<"***请选择(A、B、C、D、E)***"< cout<<"********************************"< cin>>b; if(b=='A') { a.Creat(); system("pause"); } if(b=='B') { a.xiugai(); system("pause"); } if(b=='C') { a.insert(); system("pause"); } if(b=='D') { a.delet(); system("pause"); } if(b=='E') break; } } else { cout<<"密码错误! "< system("pause"); } } if(c=='B') { charb; for(;;) { system("cls"); cout<<"*************************************"< cout<<"***欢迎登陆故宫导游系统***"< cout<<"*************************************"< cout<<"***A、查询信息***"< cout<<"***B、查询到景点的最佳路径***"< cout<<"***C、查询到所有景点的最佳路径***"< cout<<"***D、退出***"< cout<<"***请选择(A、B、C、D)***"< cout<<"*************************************"< cin>>b; if(b=='A') { a.select(); system("pause"); } if(b=='B') { a.shortpath1(); system("pause"); } if(b=='C') { a.shortpath2(); system("pause"); } if(b=='D') break; } } if(c=='C') break; } } 4调试分析 4.1测试数据 测试数据见图1. 4.2调试问题 在调试过程中遇到输出路径算法有错误,当删除一条路径时时不能正确输出相应路径,然后对输出路径的条件进行改进,增加了条件,测试成功。 4.3算法时间复杂度 录入: 时间复杂度为O(n); 查询景点信息: 时间复杂度为O(n); 修改景点信息: 时间复杂度为O(n); 插入景点和路径: 当插入的景点和路径为x,y时,若x>=y时间复杂度为O(x)反之为O(y); 删除景点和路径: 当删除的景点和路径为x,y时,若x>=y时间复杂度为O(x)反之为O(y); 查询到某景点最佳路径;此算法为迪杰斯特拉算法时间复杂度为O(n*n); 查询到所有景点的最短路径: 此算法为迪杰斯特拉算法时间复杂度为O(n*n); 4.4经验和体会 在本次课程设计中主要是对图的数据结构操作,所有刚开始对知识不是很熟悉操作起来有一定难度,容易在程序的关键地方但经过翻阅教材能较好的解决问题。 5用户使用说明 本系统是关于故宫的管理系统分为两类用户,管理员和游客,由于管理员可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 故宫 导游 路径
![提示](https://static.bdocx.com/images/bang_tan.gif)