队列求迷宫最短路径 求解迷宫的最短路径问题 数据结构队列.doc

队列求迷宫最短路径 求解迷宫的最短路径问题 数据结构队列.doc

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
队列求迷宫最短路径 求解迷宫的最短路径问题 数据结构队列 导读:就爱阅读网友为您分享以下“求解迷宫的最短路径问题 数据结构队列”资讯,希望对您有所帮助,感谢您对92的支持! #includelt;iostreamgt; using namespace std; #define MaxSize 50 int mg[10][10]= { {1,1,1,1,1,1,1,1,1,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1}, {1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,0,1}, {1,0,0,0,1,0,0,0,0,1}, {1,0,1,0,0,0,1,0,0,1}, {1,0,1,1,1,0,1,1,0,1}, {1,1,0,0,0,0,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1}, }; struct Box { int i,j,pre; }; struct QuType { Box data[MaxSize]; int front,rear; }; void print(QuType qu,int front) { int k=front,j,ns=0; do //反向找到最短的路径,将该路径上的方块的pre成员设置成 -1 { j = k; k = qu.data[k].pre; qu.data[j].pre = -1; }while(k!=0); coutlt;lt;”迷宫路径如下:”lt;lt;endl; k=0; while(klt;MaxSize) //正向搜索到pre为 -1 的方块,即构成正向的路径 { if(qu.data[k].pre==-1) { ns++; coutlt;lt;”(“lt;lt;qu.data[k].ilt;lt;”,”lt;lt;qu.data[k].jlt;lt;”)”lt;lt;” “; if(ns%5 == 0) { coutlt;lt;endl; } } k++; } coutlt;lt;endl; } bool mgpath(int xi,int yi,int xe,int ye) { int i,j,di; //定义下标 bool find=0; QuType qu; //定义数据类型为QuType 的 qu qu.front=qu.rear=-1; //初始化队头指针和队尾指针 qu.rear++; qu.data[qu.rear].i = xi; //把入口 坐标赋给 顺序队列 qu.data[qu.rear].j = yi; qu.data[qu.rear].pre = -1; mg[xi][yi] = -1; //把入口坐标 赋值为-1 避免重复索引 while(qu.front!=qu.rear !find) //如果队尾和队头指针不相同 且 发现新的方向 进行循环 { qu.front++; //出队 但是仍然在队列之中 i = qu.data[qu.front].i; // j = qu.data[qu.front].j; if(i==xe j==ye) //如果找到出口,就输出路径 { find = 1; print(qu,qu.front); return true; } for(di=0;dilt;4;di++) //循环扫描每个方块的方位,把每个可走的方块插入队列之中 { switch(di) { case 0: i = qu.data[qu.front].i-1; j = qu.data[qu.front].j; break; case 1: i = qu.data[qu.front].i; j = qu.data[qu.front].j+1; break; case 2: i = qu.data[qu.front].i+1; j = qu.data[qu.front].j; break; case 3: i = qu.data[qu.front].i; j = qu.data[qu.front].j-1; break; } if(mg[i][j] == 0) { qu.rear++;

文档评论(0)

raojun0010 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档