//走迷宫队列
#include<iostream>
using namespace std;
#define M 5
#define N 4
//迷宫
typedef struct mg
{
int x,y;//每个点的位置
int pre;//记录前一个位置
}Q;
Q sq[300];
int mg[M+2][N+2];//加圈迷宫
int zx[8]={1,0,0,1,-1,-1,1,-1};
int zy[8]={1,-1,1,0,0,-1,-1,1};//方向取值
//输出迷宫路线
void printij(int rear)
{
int i=rear;
do
{
cout<<sq[i].x<<" "<<sq[i].y<<endl;
i=sq[i].pre;
}while(i!=0);
}
//走迷宫
void mgij()
{
int x,y;
sq[0].x=1,sq[0].y=1;sq[0].pre=0;
int front=1,rear=1;
bool found=false;
while(front<=rear&&!found)
{
x=sq[front].x;y=sq[front].y;
for(int v=0;v<8;v++)
{
int xi=x+zx[v];int yi=y+zy[v];
if(mg[xi][yi]==0)
{
rear++;
sq[rear].x=xi;
sq[rear].y=yi;//加入队列
sq[rear].pre=front;//记录路径
mg[xi][yi]=-1;//防止重走
}
if(xi==M&&yi==N)
{
printij(rear);
found=1;
}
}
front++;
}
if(!found)cout<<"路径不存在"<<endl;
}
int main()
{
for(int i=1;i<=M;i++)
for(int j=1;j<N;j++)
cin>>mg[i][j];
for(int i=0;i<=M+1;i++)
{ mg[i][0]=1; mg[i][N]=1; }
for(int i=0;i<=N+1;i++)
{ mg[0][i]=1; mg[M][i]=1; }
mgij();
system("pause");
}
迷宫
最新推荐文章于 2017-05-25 20:42:01 发布