A7988.迷宫之判定
普及-
通过率:52.84%
加入题单
题目描述
一个迷宫由 𝑛n 行 𝑚m 列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。
给定一个迷宫,求从左上角走到右下角是否能走通。
输入格式
第一行是两个整数,𝑛n 和 𝑚m,代表迷宫的长和宽。(1≤𝑛1≤n,𝑚≤40m≤40)
接下来是 𝑛n 行,每行 𝑚m 个字符,代表整个迷宫。
空地格子用 00 表示,有障碍物的格子用 11 表示。
迷宫左上角和右下角都是 00。
输出格式
输出能否从左上角走到右下角,如果可以输出 "𝑌𝐸𝑆YES",若走不通,输出 "𝑁𝑂NO"。输出的内容不包含双引号。
输入输出样例
-
输入#1
复制5 5 0 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 0
输出#1
复制YES
- 代码:
-
#include <bits/stdc++.h> using namespace std; const int N = 2001; int n,m,a[N][N],vis[N][N]; int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; int flag=0; void dfs (int x,int y) { vis[x][y]=1; if(x==n and y==m) { flag=1; return; } for(int i=0;i<4;++i) { int nx =dx[i]+x; int ny =dy[i]+y; if(nx>=1 and nx<=n and ny>=1 and ny<=m and vis[nx][ny]==0 and a[nx][ny]==0) { dfs(nx,ny); } } } int main() { cin>>n>>m; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) cin>>a[i][j]; dfs(1,1); if(flag==1) cout<<"YES"; else cout<<"NO"; return 0; }