rt
#include<bits/stdc++.h>
using namespace std;
const int N=18;
int a[N][N],vis[N][N],anx[N*N],m,n,zx,zy,qx,qy,any[N*N],ans,f[4][2]={0,-1,-1,0,0,1,1,0},kx,ky;
void dfs(int x,int y,int b){
if(x==zx&&y==zy){
++ans;
for(int i=0;i<b;++i){
printf("(%d,%d)->",anx[i],any[i]);
}
printf("(%d,%d)\n",anx[b],any[b]);
return ;
}
for(int i=0;i<4;++i){
kx=x+f[i][0];
ky=y+f[i][1];
if(kx<=m&&ky<=n&&kx>=1&&ky>=1&&a[kx][ky]==1&&vis[kx][ky]==0){
anx[b+1]=kx;
any[b+1]=ky;
vis[kx][ky]=1;
dfs(kx,ky,b+1);
vis[kx][ky]=0;
}
}
}
int main(){
scanf("%d%d",&m,&n);
for(int i=1;i<=m;++i){
for(int j=1;j<=n;++j){
scanf("%d",&a[i][j]);
}
}
scanf("%d%d",&qx,&qy);
scanf("%d%d",&zx,&zy);
anx[0]=qx;
any[0]=qy;
vis[qx][qy]=1;
dfs(qx,qy,0);
if(ans==0) cout<<-1;
return 0;
}
In:
5 6
1 0 0 1 0 1
1 1 1 1 1 1
0 0 1 1 1 0
1 1 1 1 1 0
1 1 1 0 1 1
1 1
5 6
Out:
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(2,4)->(3,4)->(3,3)->(4,3)->(4,4)->(4,5)->(5,5)->(5,6)