网站大量收购独家精品文档,联系QQ:2885784924

校園导游图系统数据结构实验报告.docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
校園导游图系统数据结构实验报告

一. 设计目的 通过布置具有一定难度的实际程序设计项目,使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法;使学生掌握分析问题,求解问题的方法并提高学生设计编程实现的能力。 二. 设计内容 用无向网表示学校的校园景点平面图,图中顶点表示主要景点, 存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。游客通过终端可询问: (1)从某一景点到另一景点的最短路径。 (2)游客从公园进入,选取一条最佳路线。 (3)使游客可以不重复地浏览各景点,最后回到出口(出口就在入口旁边)。 [基本要求] (1)将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路, 边上的权值表示距离.为此图选择适当的数据结构。 (2)把各种路径都显示给游客,由游客自己选择浏览路线。 (3)画出景点分布图于屏幕上。 [实现提示] (1)构造一个无向图G并用邻接矩阵来存储。 (2)利用迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径用二维数组p[i][]来记录, 最短路径长度就用一维数组d[i]存放;i的范围:0~20。 (3)一维数组have[]是用来记录最短路径出现顶点的顺序。 (4)根据起点和终点输出最短路径和路径长度。 三.概要设计 1.功能模块图; 2.各个模块详细的功能描述。 1.浏览校园全景:采用深度遍历遍历图进行所有景点浏览,将遍历景点信息输出 2.查看所有游览路线:用户输入一个景点,采用迪杰斯特拉算法将从该景点起所有路径查出并输出在屏幕上 3.选择出发点和目的地:用户输入一个出发点和一个目的地编号,采用弗洛伊德算法求出发点到目的地的最短路径 4.查看景点信息:直接用编号进行单个景点查询。 四.详细设计 重点设计及编码 在求最短路径时采用迪杰斯特拉算法 // 迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点 void ShortestPath_DIJ(MGraph * G) { //迪杰斯特拉算法,求从顶点v0到其余顶点的最短路经及其带权长度d[v] //若p[v][w]为1,则w是从v0到v的最短路经上的顶点 //final[v]类型用于设置访问标志 int v,w,i,min, final[20], D[20], p[20][20],t=0,x,flag=1,v0; //vo为起始景点的编号 while(flag) { printf(请输入一个起始景点编号:); scanf(%d,v0); if(v00||v0G-vexnum) { printf(景点编号不存在!请重新输入景点编号:); scanf(%d,v0); } if(v0=0v0G-vexnum) flag=0; } for(v=0;vG-vexnum;v++) { final[v]=0;//初始化各顶点访问标志 D[v]=G-arcs[v0][v].adj; //v0 到各顶点 v 的权值赋值给d[v] for(w=0;wG-vexnum;w++) //初始化p[][]数组,各顶点间的路径全部设置为空路径0 p[v][w]=0; if(D[v]INFINITY) {p[v][v0]=1;p[v][v]=1;} //v0 到v 有边相连,修改p[v][v0]的值为1 } //各顶点自己到自己要连通 D[v0]=0; //自己到自己的权值设为0 final[v0]=1; //v0的访问标志设为1,v 属于 s 集 for(i=1;iG-vexnum;i++) //对其余g.vexnum-1个顶点w,依次求 v 到 w 的最短路径 { min=INFINITY; for(w=0;wG-vexnum;w++)//在未被访问的顶点中,查找与 v0 最近的顶点v if(!final[w]) if(D[w]min)//v0 到 w (有边)的权值min {v=w;min=D[w];} final[v]=1; //v 的访问标志设置为1,v 属于s集 for(w=0;wG-vexnum;w++)//修改v0 到其余各顶点w 的最短路径权值d[w] if(!final[w](min+G-arcs[v][w].adjD[w])) //若w 不属于s,且v 到w 有边相连 {

文档评论(0)

fv45ffsjjI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档