您好,欢迎光临本网站![请登录][注册会员]  
文件名称: C++数据结构实验漫步迷宫
  所属分类: C/C++
  开发工具:
  文件大小: 330kb
  下载次数: 0
  上传时间: 2012-05-22
  提 供 者: hu2008y*******
 详细说明: 一 。课程设计题目:漫步迷宫 二 。问题描述: 用m行n列的m*n个正方格表示一个迷宫,其中划有斜线的方格表示不可通行,未划有斜线的方格表示可以通行。请编写寻找从入口到出口的一条最短路径的程序。 三 。基本要求: 1。迷宫的规格(即行数与列数),状态设置(即各方格能否通行的状态),以及入口和出口的位置,均应由输入随机确定。 2。求得的最短路径,应该以从入口到出口的路径上的各个方格的坐标的线性序列输出。当无通路时,应该报告无路径的信息。 3。尽量采用结构化程序设计方法,要求对各个模块的功能及参数作必要的说明。 四 。实现提示: 1。迷宫可以采用matrix类型的二维数组A表示。A.rownum与A.colnum分别表示迷宫的实际的行数与列数。而A.maze[i][j]表示迷宫中第i行第j列的一个方格,用A.maze[i][j]=0表示该方格可以通行,用A.maze[i][j]=1表示该方格不可以通行。 2。由于要寻找从入口到出口的一条最短路径,最好将迷宫看作是一个图结构。则问题转化为寻找从对应于入口顶点到对应于出口顶点的一条最短路径的问题。该问题可以采用从入口顶点出发,进行广度优先搜索遍历,直到遇到出口顶点 或者遍历完毕也没有遇到出口顶点为止。这二种情况分别对应于最短路径探索成功与查无通路的事实。 3。基于上述分析,涉及到数据结构的转换,即将二维数组表示的迷宫A转换为以adjlist 类型的邻接表表示的图结构G。在图结构中,将迷宫中的每个方格看作是一个顶点。不可通行的方格都是孤立顶点;相邻的可通行的方格所对应的顶点之间看作是有边相连。因此迷宫 可以看作是由m*n个顶点及无向边构成的一个非连通的无向图。尽管图是不连通的,但不影响本问题的求解,而且本问题有解的条件是:入口顶点与出口顶点在同一个连通分量中。 图结构G中,G.adj[k]表示编号为k的顶点的邻接情况的单链表的头指针;G.vexnum表示图G中的实际顶点数,而且具有如下关系:G.vexnum=A.rownum*A.colnum 4。为了避免迷宫数据的重复输入,我们期望A能够自动地转换为G。因此应该设计一个转换算法create_adjlist(A,G)。而图结构中顶点是要编号的,我们约定以行为序,顺序给迷宫A中的方格所对应的顶点编号。这样迷宫中方格的坐标(即行row和列col)与图G中所对应的顶点的编号(即verno)之间具有如下关系: verno=(row-1)* n + col row=(verno-1)/ n + 1 col=(verno-1)% n + 1 5。在广度优先搜索遍历求解最短路径过程中,应该设置一个队列queue作为辅助数据结构;路径采用一个整数数组pred来表示。这二个数据结构的存储结构类型均为list类型,其说明定义如下:typedef int list[MAXVER]; 队列queue应该设置front和rear分别指示列首与列尾,queue[k]表示第k个入列的顶点编号。采用pred记录路径,pred[i]表示顶点i在广度优先搜索遍历过程中的前趋顶点的编号,它表明是经过边(pred[i],i)达到顶点i的。这样,当路径探索成功时,我们可以从出口顶点倒推出从入口到出口的一条路径来。当然要涉及到从顶点编号向方格坐标的反转换,这个公式在上面已经给出了。 ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: