[迷宫算法.docVIP

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

迷宫算法 算法思想:findpath首先创建一个足够大的堆栈,然后对偏移量数组进行初始化,并在迷宫周围增加一圈障碍物。在while循环中,从当前位置here出发,按下列次序来选择下一个移动位置:向右、向下、向左、向上。如果能够移动到下一个位置,则将当前位置放入堆栈path,并移动到下一个位置。如果找不到下一个可移动的位置,则退到前一个位置。如果无法回退一个位置(即堆栈为空),则表明不存在通往出口路径。当回退至堆栈的顶部位置(next)时,可以重新选择另一个可能的相邻位置,这可利用next和here来推算。注意here是next的一个邻居。对下一个移动位置选择可用以下代码来实现: If(next.row==here.row)//推算next可移动位置的个数 Option=2+next.col-here.col; else option=3+next.row; Struct position{//位置 int row;//行 Int col;//列 }position; Status FindPath() {//寻找从位置(1,1)到出口(m,m)的路径 Position offset[4]; Offset[0].row=0;offset[0].col=1;//向右 Offset[1].row=1;offset[1].col=0;//向下 Offset[2].row=0;offset[2].col=-1;//向左 Offset[3].row=-1;offset[3].col=0;//向上 //在迷宫周围增加一圈障碍物 for(int i=0;i=m+1;i++) { maze[0][i]=maze[m+1][i]=1;//底和顶 maze[i][0]=maze[i][m+1]=1;//左和右 } //优点:是程序不必处理边界条件,简化代码设计。 Path=new StackPosition(m*m-1); Position here; here.row=1; here.col=1; maze[1][1]=1;//阻止返回入口 int option=3; while(here.row!=mhere.col!=m)//不是出口 {//寻找并移动到一个相邻位置 int r,c; while(option=LastOption) { r=here.row+offset[option].row;//设置相邻格点 c=here.col+offset[option].col; if(maze[r][c]==0) break; option++; } //找到一个相邻位置了吗? if(option=LastOption) {//移动到maze[r][c] path-add(here); here.row=r; here.col=c; //设置障碍以阻止再次访问 maze[r][c]=1; option=0; } else{//没有可用的相邻位置,回溯 (path-isEmpty()) return OK; Position next; Path-Delete(next);//退回至栈顶位置next If(next.row==here.row)//推算next可移动位置的个数 Option=2+next.col-here.col; else option=3+next.row; here=next; } return ERROR; } 最短路径算法 算法思想:程序首先检查start 和finish是否相同,如果相同,则路径长度为0,程序终止。否则设置一堵由封锁位置构成的“围墙”,把网格包围起来。然后对offset数组进行初始化,并在起始位置上标记2。借助于队列Q并从位置start开始,直到移动到下start相距为1的网格位置,然后移动到start相距为2的网格位置,不断继续下去,直到到达位置finish或者无法继续移动到下一个新的、空白的位置。在后一种情况下,将不存在到达位置finish的路径,而在前一种情况下,位置finish将得到一个相应的编号。 如果到达了finish,则可以利用网格上的标号来重构路径。路径上的位置(start除外)均被存储在数组path之中。 Status FindPath(Position start,Position finish,int Pathlen,Position*path) {//寻找从start到finish的路径 if((start.row==finish.row)(start.col==finish.col)) { Pathlen=0; return OK; } Position offset[4]; Offset[0].row=0;offset[0].col=1;//向右 Offset[1]

文档评论(0)

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

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

1亿VIP精品文档

相关文档