#include <iostream>
using namespace std;
int n;
int maze[101][101]; // 迷宫地图
bool visited[101][101]; // 访问标记
int ha, la, hb, lb;
bool found = false;
// 四个移动方向:上、右、下、左
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
void dfs(int x, int y) {
// 如果已经找到路径或者越界或者是墙或已访问,则返回
if (found || x < 1 || x > n || y < 1 || y > n || maze[x][y] == 1 || visited[x][y]) {
return;
}
// 到达终点
if (x == hb && y == lb) {
found = true;
return;
}
// 标记为已访问
visited[x][y] = true;
// 尝试四个方向
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
dfs(nx, ny);
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> maze[i][j];
}
}
cin >> ha >> la >> hb >> lb;
// 检查起点或终点是否为墙
if (maze[ha][la] == 1 || maze[hb][lb] == 1) {
cout << "NO";
return 0;
}
// 特殊情况:起点就是终点
if (ha == hb && la == lb) {
cout << "YES";
return 0;
}
dfs(ha, la);
cout << (found ? "YES" : "NO");
return 0;
}
/**************************************************************
Problem: 1430
User: zhengzihao
Language: C++
Result: Accepted
Time:27 ms
Memory:2124 kb
****************************************************************/