#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;
}

利用数组模拟队列。并保存前驱