给出一个n*m的迷宫,其中标记为1的为障碍,标记为0的为可以通行的地方。
迷宫的入口为左上角,出口为右下角,只能从一个位置走到这个它的上、下、左、右四个方向之一。
如果能顺利走出迷宫就输出YES,否则输出NO
输入? ? ? 输出 YES
2 2
0 1
1 0
#include <iostream>
using namespace std;
int n,m;
int a[505][505];
bool f=false;
int fx[5]={0,0,1,0,-1};
int fy[5]={0,1,0,-1,0};
void dfs(int x,int y)
{
a[x][y]=1;
int tx,ty; //下一个点的下标
for(int i=1;i<=4;i++)
{
tx=x+fx[i];
ty=y+fy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]==0&&f==false) //若下一个点符合条件,就再次递归,,,使用f==false来终止递归
{
if(tx==n&&ty==m)
{
f=true;
}
else
{
dfs(tx,ty);
}
}
}
}
int main ()
{
cin >> n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin >> a[i][j];
}
}
if(a[1][1]==1||a[n][m]==1)
{
cout << "NO" << endl;
}
else
{
dfs(1,1);
if(f==true)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}
|