P16358 [BalticOI 2026] Island

题目描述

给定一个 $n\times n$ 的网格,每个格子要么是陆地,要么是水域。网格的行和列均从 $1$ 到 $n$ 编号。你可以在网格中向左、右、上、下一步移动。如果在移动过程中始终停留在同一种类型的格子上,则称这两个格子是连通的。 所有陆地格子构成一个连通的岛屿,而所有水域格子构成一个连通的海洋。网格的第一行、最后一行、第一列和最后一列均只包含水域格子。 你的任务是回答 $q$ 个询问:给定两个陆地格子 $(r_1,c_1)$ 和 $(r_2,c_2)$,从第一个格子出发,在只经过陆地格子的前提下,到达第二个格子所需的最少步数是多少?

输入格式

第一行包含两个整数 $n$ 和 $q$,分别表示网格的大小和询问的数量。 接下来 $n$ 行,每行包含 $n$ 个字符,描述整个网格。其中 "`.`" 表示水域格子,"`#`" 表示陆地格子。 再接下来 $q$ 行,每行包含四个整数 $r_1$, $c_1$, $r_2$ 和 $c_2$,依次表示第一个格子的行、列,以及第二个格子的行、列。

输出格式

对于每个询问,输出一行一个整数表示答案。

说明/提示

### 数据范围 - $3\le n\le 1000$ - $1\le q\le 10^5$ - 所有询问满足 $1 < r_1,c_1,r_2,c_2 < n$ ### 子任务 | 子任务 | 约束条件 | 分值 | | :---: | --- | :---: | | 1 | $n \le 200$, $q \le 200$ | $10$ | | 2 | 没有一行或一列在陆地格子之间存在水域格子 | $6$ | | 3 | 不存在任何 $2\times2$ 的区域全为陆地格子 | $16$ | | 4 | 没有一行在陆地格子之间存在水域格子 | $28$ | | 5 | 无额外限制 | $40$ | 翻译由 DeepSeek V4 Pro 完成