- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)