#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;
}