#6642. 迷宫出口(8 方向)

迷宫出口(8 方向)

迷宫出口(8 方向)

题目描述

一天,Extense 在森林里探险时误入了一个迷宫。迷宫由 (n \times n) 的格点组成,每个格点的值只有 01

  • 0 表示该位置可以通行;
  • 1 表示该位置不可通行。

Extense 可以朝周围 8 个方向 移动,包括:

左上  上  右上
左    当前  右
左下  下  右下

也就是说,他可以向 上、下、左、右、左上、右上、左下、右下 这 8 个方向移动。

现在他希望从点 A 走到点 B,请判断是否可行。

如果 A 或 B 不能通行,即对应格点的值为 1,则直接输出 NO

如果能够从 A 走到 B,则输出 YES,否则输出 NO


输入格式

第一行包含一个整数 (n),表示迷宫的大小为 (n \times n)。

接下来 (n) 行,每行 (n) 个整数,表示迷宫的 0/1 矩阵。

最后一行包含四个整数:

ha la hb lb

其中:

  • ha la 表示起点 A 的行号和列号;
  • hb lb 表示终点 B 的行号和列号。

坐标从 1 开始,即 ((ha, la)) 和 ((hb, lb)) 都是 1-based 坐标


输出格式

如果可以从 A 点走到 B 点,输出:

YES

否则输出:

NO

输入输出示例

输入示例 1

3
0 1 1
0 0 1
1 0 0
1 1 3 3

输出示例 1

YES

样例解释

迷宫如下:

A 1 1
0 0 1
1 0 B

因为允许 8 方向移动,所以可以从:

(1,1) → (2,2) → (3,3)

到达终点 B,因此输出:

YES

数据范围

1 ≤ n ≤ 100
ai ∈ {0, 1}
1 ≤ ha, la, hb, lb ≤ n

题目分析

这是一道迷宫连通性判断题。

由于每个格点可以向周围 8 个方向移动,因此可以使用 DFS 或 BFS 进行搜索。

搜索时需要判断:

  1. 当前格子是否越界;
  2. 当前格子是否为障碍物;
  3. 当前格子是否已经访问过;
  4. 是否已经到达终点。

若起点或终点为 1,说明不可通行,直接输出 NO

否则,从起点开始进行搜索。只要能够搜索到终点,就输出 YES;如果搜索结束仍未到达终点,则输出 NO