#include<cstdio>
using namespace std;
struct Node
{
int x;//当前结点的坐标
int y;//当前结点的坐标
int pre;//前驱
} q[200];
bool vis[10][10];//是否访问
int way[4][2]= {{0,-1},{0,1},{-1,0},{1,0}}; //上下左右四个方向
int maze[10][10];//定义迷宫
int l=0,r=1,x,y,nx,ny;
void Print(Node path)
{
if(path.pre==-1)
{
printf("(%d, %d)\n",path.x-1,path.y-1);
return;
}
else
{
Print(q[path.pre]);
printf("(%d, %d)\n",path.x-1,path.y-1);
}
}
void bfs()
{
while(l<r)
{
x = q[l].x;
y = q[l].y;
if(x==5&&y==5)
{
Print(q[l]);
return;
}
for(int i = 0; i<4; ++i)
{
nx = x + way[i][0];
ny = y + way[i][1];
if(vis[nx][ny]==false&&maze[nx][ny]==0)
{
if(nx>=1&&nx<=5&&ny>=1&&ny<=5)
{
q[r].x = nx;
q[r].y = ny;
q[r].pre = l;
vis[nx][ny] = true;
r++;
}
}
}
l++;
}
return;
}
int main()
{
//freopen("in.txt","r",stdin);
for(int i = 1; i<=5; ++i)
for(int j = 1; j<=5; ++j)
scanf("%d",&maze[i][j]);
q[0].x = 1;
q[0].y = 1;
q[0].pre = -1;
vis[1][1] = true;
bfs();
return 0;
}
利用数组模拟队列。并保存前驱