A与A星算法【DOC精选】.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  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文档。上传文档
查看更多
A与A星算法【DOC精选】

只是用一个二维状态数组,结果迂回搜索导致超时. /showproblem.php?pid=4198 Quick out of the Harbour Problem Description 题目原文是英文的,而且比较繁琐。我修饰转述如下: ?小强被海盗抓到了,海盗把他和他的船“小强号”关在一个水狱里。 ?小强拿到了小红给他的一张水狱地图,地图由h行w列字符组成(3 = h;w = 500), ,字符共有四种: ?S:小强和他的“小强号”的起始位置,他要从这里逃跑。 ?#:不能逾越的石墙 . :?水道,小强号可以直接通过 @:栅栏水道 ? 已知: 小强打开栅栏需要d分钟 (0 = d = 50); 小强号通过单位水道的时间为1分钟; 水狱一定有出口。? 输入: t???????????????????????????????????????????????????? (一共有t组测试数据) h w d 以及水狱地图??????????????????????? (每组测试数据输入一次)? 输出: 小强出狱的最短时间(和路线)。 Sample Input 2 6 5 7 ##### #S..# #@#.# #...# #@### #.### 4 5 3 ##### #S#.# #@..# ###@# Sample Output 16 11 分析: 从S点开始,广度优先搜索,寻找出口。? ?由于有栅栏,不能保证搜索的当前结点是“耗时最少”的优先搜索,对当前结点耗时v取权重,采用优先队列。 code:(普通广度搜索,超时) #includeiostream #includequeue using namespace std; #define N 501 #define big 999999999 int h,w,d,sx,sy,t,i,j; int tv[N][N]; char maze[N][N]; int offset[4][2]={{-1,0},{0,-1},{1,0},{0,1}}; struct pos {int x;int y;}; int bfs() { ??? int mymin=big; ??? pos start,temp,temp1; ??? start.x=sx,start.y=sy; ??? tv[sx][sy]=0; ??? ??? queuepos q; ??? q.push(start); ??? while(!q.empty()) ??? {???????????? ??????? temp=q.front(); ??????? q.pop(); ??????? if(temp.x==0||temp.x==h-1||temp.y==0||temp.y==w-1) ??????????? if(mymintv[temp.x][temp.y]+1) ??????????????? mymin=tv[temp.x][temp.y]+1; ??????? printf(path: %d %d %c\n,temp.x,temp.y,maze[temp.x][temp.y]); ??????? ??????? for(i=0;i4;i++) ??????? { ??????????? pos temp1; ??????????? temp1.x=temp.x+offset[i][0]; ??????????? temp1.y=temp.y+offset[i][1]; ??????????? if(temp1.x0||temp1.x=h||temp1.y0||temp1.y=w) ??????????????? continue; ??????????? ??????????? if(maze[temp1.x][temp1.y]==.) ??????????????? if(tv[temp1.x][temp1.y]tv[temp.x][temp.y]+1) ??????????????? { ??????????????????? tv[temp1.x][temp1.y]=tv[temp.x][temp.y]+1; ??????????????????? q.push(temp1); ??????????????? } ??????????? if(maze[temp1.x][temp1.y]==@) ??????????????? if(tv[temp1.x][temp1.y]tv[temp.x][temp.y]+d+1) ???????????????????????? {tv[temp1.x][temp1.y]=tv[temp.x][temp.y]+1+d;q.push(temp1);}???

文档评论(0)

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

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

1亿VIP精品文档

相关文档