#include<stdio.h>
#include<string.h>
int a[10][10]={0};//地图
struct st{
int x;//横坐标
int y;//纵坐标
int f;//爸爸下标
int s;//路径长度;对于这一题没有st()//构造函数{//成员调用前初始化
x=0;
y=0;
f=-1;
s=0;}}q[100],s[101];
int book[10][10];//标记矩阵
int next[4][2]={-1,0,1,0,0,1,0,-1};//方向矩阵
int main(){memset(a,1,sizeof(a));for(int i=1;i<=5;i++)for(int j=1;j<=5;j++)scanf("%d",&a[i][j]);//输入矩阵/*bfs */
int f=0,r=0;//f:队列头指针;r:队列尾指针
int x=1,y=1;
int nx,ny;
int flag=0;//标记
q[r].x=1;
q[r].y=1;
q[r++].s=1;
book[x][y]=1;//通过后标记while(f!=r)//bfs遍历模板{
x=q[f].x;
y=q[f].y;for(int i=0;i<4;i++){//循环遍历4个方向
nx=x+next[i][0];
ny=y+next[i][1];if(a[nx][ny]==0&&book[nx][ny]==0){
book[nx][ny]=1;
q[r].x=nx;
q[r].y=ny;
q[r].f=f;//记录爸爸下标
q[r++].s=q[f].s+1;//每个点的步数,这一题用不到if(nx==5&&ny==5){//到达终点
flag=1;//标记break;//内循环结束}}}if(flag==1)break;//外循环结束,这个必不可少,不然队列最后不一定是终点
f++;//头指针一定要最后++,不然爸爸下标会多一}
int t=r-1;//队列最后一个点下标
int k=0;while(t!=-1)//起点没爸爸下标是-1;t==-1结束{//直接输出是倒序的,所以再用一个数组储存点的坐标
s[k].x=q[t].x;
s[k++].y=q[t].y;
t=q[t].f;//寻找该点的爸爸}for(int i=k-1;i>=0;i--)//输出printf("(%d, %d)\n",s[i].x-1,s[i].y-1);return0;}