#include <stdio.h> #include<malloc.h> // int rec[100][2]; // int n,m; // int **mz; // int cnt; // int flag; // void dfs(int x,int y) // { // rec[cnt][0]=x; // rec[cnt++][1]=y; // mz[x][y]=1; // if(x==m-1 && y==n-1){ // flag=1; // return ; // } // if(x-1>=0 && mz[x-1][y]==0 && !flag)dfs(x-1,y); // if(x+1<m && mz[x+1][y]==0 && !flag)dfs(x+1,y); // if(y-1>=0 && mz[x][y-1]==0 && !flag)dfs(x,y-1); // if(y+1<n && mz[x][y+1]==0 && !flag)dfs(x,y+1); // if(flag)return; // cnt--; // mz[x][y]=0; // } // int main() { // int i, j; // scanf("%d%d", &n, &m); // //二维数组动态分配 // mz = (int**)malloc(n * sizeof(int*)); // for ( i = 0; i < n; i++) // mz[i] = (int*)malloc(m * sizeof(int )); // //初始化 // for (i = 0; i < n; i++) // for (j = 0; j < m; j++) // scanf("%d", &mz[i][j]); // dfs(0,0); // for(int i=0;i<cnt;i++){ // printf("(%d,%d)\n",rec[i][0],rec[i][1]); // } // return 0; // } int mz[20][20]; int m,n; int cnt; int flag; int save[100][2]; void dfs(int x,int y) { save[cnt][0]=x; save[cnt++][1]=y; mz[x][y]=1; if(x==m-1 && y==n-1){ flag=1; return ; } if(x-1>=0 && mz[x-1][y]==0 && !flag)dfs(x-1,y); if(x+1<m && mz[x+1][y]==0 && !flag)dfs(x+1,y); if(y-1>=0 && mz[x][y-1]==0 && !flag)dfs(x,y-1); if(y+1<n && mz[x][y+1]==0 && !flag)dfs(x,y+1); if(flag)return; cnt--; mz[x][y]=0; } int main(void) { while(scanf("%d %d",&m,&n)!=EOF){ for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ scanf("%d",&mz[i][j]); } } cnt=0; flag=0; dfs(0,0); for(int i=0;i<cnt;i++){ printf("(%d,%d)\n",save[i][0],save[i][1]); } } return 0; }