#5383. 2026/3/14/LH笔记(DFS1)
2026/3/14/LH笔记(DFS1)
当前没有测试数据。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int n, a[N][N], vis[N][N];
int sx, sy, ex, ey;
int dx[] = {0, 0, 1,-1}, dy[] = {1,-1, 0, 0};
//dfs deep first search
//深度优先搜索
//一条路走到黑 才回头
//我们当前在 (x,y)这个点
//我们会从这个点尝试他的四个方向能不能走
//如果能走 我们就走
//需要注意逻辑的统一性 我们先到这个位置再标记 和先标记再到这个位置 都是可以的
//如果选择了一种写法,就全部都这样写
void dfs(int x, int y){
//1.新坐标不能越界
//2.新坐标不能是障碍物
//3.不能标记过
for (int i = 0; i < 4; i++){//遍历4个方向
int nx = x + dx[i], ny = y + dy[i];
//new_x
if (nx >= 1 && nx<= n && ny>= 1 && ny <= n && a[nx][ny] != 1 && vis[nx][ny] == 0){
vis[nx][ny] = 1;
dfs(nx, ny);
}
}
}
int main(){
cin >> n;
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
cin >> a[i][j];
}
}
cin>>sx>>sy>>ex>>ey;
if(a[sx][sy]||a[ex][ey]){//特判起点或者终点为1的情况
cout<<"NO";
return 0;
}
vis[sx][sy]=1;
dfs(sx, sy);
if(vis[ex][ey]) cout<<"YES";
else cout<<"NO";
return 0;
}