老鼠走迷宫:用一个二维数组a[m][n]表示迷宫,数组元素0表示通路,为1表示墙壁。老鼠在除边角外的任意位置都可以试探8个方向 。请用回溯法求出从入口a[0][0]到出口a[m-1][n-1]的通路。 #include<iostream> #include<cstring> #define N 1000 using namespace std; bool v[N][N]; int a[N][N],path[N*N][2],step,m,n,d[8][2]={{-1,-1},{-1,0},{0,-1},{-1,1},{1,-1},{1,0},{0,1},{1,1}}; bool Maze(int x,int y){ if(x==m-1&&y==n-1) return true; for(int i=0;i<8;i++){ int tx=x+d[i][0],ty=y+d[i][1]; if(0<=tx&&tx<m&&0<=ty&&ty<n&&a[tx][ty]==0&&!v[tx][ty]){ v[tx][ty]=true; if(Maze(tx,ty)){ path[step][0]=tx; path[step][1]=ty; step++; return true; } } } return false; } int main(){ while(cin>>m>>n){ for(int i=0;i<m;i++) for(int j=0;j<n;j++) cin>>a[i][j]; memset(v,false,sizeof(v)); v[0][0]=true; step=0; if(Maze(0,0)){ path[step][0]=0; path[step][1]=0; for(int i=step;0<=i;i--) cout<<"("<<path[i][0]<<","<<path[i][1]<<")"<<endl; } else cout<<"No path."<<endl; } return 0; }