//这是使用BFS方法 #include<bits/stdc++.h> using namespace std; int a[110][110]; int b[1001000],x[1001000],y[1001000],s[10001000]; //建立四个数组,分别存储 编号,行数,列数,从第s编号动一格得到的 int main(){ int h,w;cin>>h>>w; for(int i=0;i<h;i++)for(int j=0;j<w;j++)scanf("%d",&a[i][j]); int n1=0,n2=0;//使用n1存储每一轮得到的第一个位置的编号 //使用n2存储每一轮结束后-最后得到的位置的编号 int wei=0; b[0]=0,x[0]=h-1,y[0]=w-1,s[0]=0;//初始化信息,从终点开始走 int pan=0;//判定条件 while(1){ int p=n1,q=n2; n1=n2+1;//更新n1 for(wei=p;wei<=q;wei++){//代表该轮由编号为 wei 的位置移动一格得到 if(x[wei]==0&&y[wei]==0){pan=1;break;}//从终点遍历到起点,如果到达了起点,终止循环 //| if(x[wei]>0&&a[x[wei]-1][y[wei]]!=1) //| n2++,b[n2]=n2,x[n2]=x[wei]-1,y[n2]=y[wei],s[n2]=b[wei];//向上 //| //| if(x[wei]<h-1&&a[x[wei]+1][y[wei]]!=1) //| n2++,b[n2]=n2,x[n2]=x[wei]+1,y[n2]=y[wei],s[n2]=b[wei];//向下 //| //| if(y[wei]>0&&a[x[wei]][y[wei]-1]!=1) //| n2++,b[n2]=n2,x[n2]=x[wei],y[n2]=y[wei]-1,s[n2]=b[wei];//向左 //| //| if(x[wei]<w-1&&a[x[wei]][y[wei]+1]!=1) //| n2++,b[n2]=n2,x[n2]=x[wei],y[n2]=y[wei]+1,s[n2]=b[wei];//向右 //| //| a[x[wei]][y[wei]]=1;//走过的路标记为墙壁,不走回头路 //| //| } //| //| if(pan)break;//<<<<-------------------------------------------------------- } while(1){ printf("(%d,%d)\n",x[wei],y[wei]); if(x[wei]==h-1&&y[wei]==w-1)break; wei=s[wei];//每一轮把位置更新为得到这个位置的点 } return 0; }