BFS
#include<bits/stdc++.h>
using namespace std;
#define maxn 500
struct point
{
int x,y,f;
//point(int x,int y,int f):x(x),y(y),f(f){}
};
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
point ans[maxn],que[maxn];
int pre[maxn],m[5][5],vis[5][5];
int cas;
void bfs()
{
int head=1,tail=1;
que[head].x=0;
que[head].y=0;
que[head].f=-1;
tail++;
while(head<tail)
{
int xx=que[head].x;
int yy=que[head].y;
if(xx==4&&yy==4)
{
cas=0;
while(que[head].f!=-1)
{
ans[cas++]=que[head];
que[head]=que[que[head].f];
}
return ;
}
for(int i=0;i<4;i++)
{
int dxx=xx+dx[i];
int dyy=yy+dy[i];
if(dxx>=0&&dxx<5&&dyy>=0&&dyy<5&&m[dxx][dyy]!=1)
{
m[dxx][dyy]=1;
que[tail].x=dxx;
que[tail].y=dyy;
que[tail].f=head;
tail++;
}
if(dxx==4&&dyy==4)
{
break;
}
}
head++;
}
}
int main()
{
int i,j;
memset(vis,0,sizeof(vis));
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
cin>>m[i][j];
}
}
bfs();
ans[cas].x=0,ans[cas].y=0;
for(int i=cas;i>=0;i--)
cout<<"("<<ans[i].x<<", "<<ans[i].y<<")"<<endl;
return 0;
}