#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string>
#include <vector>
int flag[MAX][MAX];
const int dx[4]={1,0,-1,0}; //控制方向
const int dy[4]={0,1,0,-1};
struct aaa
{
int x;
int y;
int step;
}que[MAX];
void bfs(aaa que[],int n)
{
int now=1; //目前所在的点
int book=2; //即将进入点在队列的位置
int will_x;
int will_y;
int newflag=1;
while(now<book)
{
for(int i=0;i<4;i++)
{
will_x=que[now].x+dx[i];
will_y=que[now].y+dy[i];
if(will_x>=1&&will_x<=n&&will_y>=1&&will_y<=n) //在边界内
{
//cout<<1<<endl;
if(MAP[will_x][will_y]!=0&&flag[will_x][will_y]==0) //未行过的点 且不是陷阱
{
flag[will_x][will_y]=1;
que[book].x=will_x; //入队列
que[book].y=will_y;
que[book].step=que[now].step+1;
book++;
if(will_x==n&&will_y==n)
{
newflag=2;
break;
}
}
}
}
if(newflag==2) break;
now++;
}
for(int i=1;i<book;i++) //
{
cout<<que[i].x<<" "<<que[i].y<<" "<<que[i].step<<endl;
}
}
int main()
{
int n;
while(cin>>n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>MAP[i][j];
//====================================================================
MAP[1][1]=9;//初始化
MAP[n][n]=9;
que[1].x=1;
que[1].y=1;
que[1].step=0;
flag[1][1]=1;
//====================================================================
for(int i=1;i<=n;i++)//打印地图
{
for(int j=1;j<=n;j++) cout<<MAP[i][j]<<" ";
cout<<endl;
}
cout<<endl;
//=================================================================
bfs(que,n);
}
}
#include <algorithm>
#include <iostream>
#include <math.h>
#include <string>
#include <vector>
using namespace std;
#define MAX 101
int flag[MAX][MAX];
const int dx[4]={1,0,-1,0}; //控制方向
const int dy[4]={0,1,0,-1};
struct aaa
{
int x;
int y;
int step;
}que[MAX];
void bfs(aaa que[],int n)
{
int now=1; //目前所在的点
int book=2; //即将进入点在队列的位置
int will_x;
int will_y;
int newflag=1;
while(now<book)
{
for(int i=0;i<4;i++)
{
will_x=que[now].x+dx[i];
will_y=que[now].y+dy[i];
if(will_x>=1&&will_x<=n&&will_y>=1&&will_y<=n) //在边界内
{
//cout<<1<<endl;
if(MAP[will_x][will_y]!=0&&flag[will_x][will_y]==0) //未行过的点 且不是陷阱
{
flag[will_x][will_y]=1;
que[book].x=will_x; //入队列
que[book].y=will_y;
que[book].step=que[now].step+1;
book++;
if(will_x==n&&will_y==n)
{
newflag=2;
break;
}
}
}
}
if(newflag==2) break;
now++;
}
for(int i=1;i<book;i++) //
{
cout<<que[i].x<<" "<<que[i].y<<" "<<que[i].step<<endl;
}
}
int main()
{
int n;
while(cin>>n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>MAP[i][j];
//====================================================================
MAP[1][1]=9;//初始化
MAP[n][n]=9;
que[1].x=1;
que[1].y=1;
que[1].step=0;
flag[1][1]=1;
//====================================================================
for(int i=1;i<=n;i++)//打印地图
{
for(int j=1;j<=n;j++) cout<<MAP[i][j]<<" ";
cout<<endl;
}
cout<<endl;
//=================================================================
bfs(que,n);
}
}