#ABC351D. [ABC351D] 网格和磁铁(Grid and Magnet)

    ID: 2758 Type: Default 1000ms 256MiB Tried: 0 Accepted: 0 Difficulty: (None) Uploaded By: Tags>ABC入门算法闯关搜索类问题初探

[ABC351D] 网格和磁铁(Grid and Magnet)

题目描述

有一个 HHWW 列的网格。某些单元格(可能为零)包含磁铁。

网格的状态由 HH 个长度为 WW 的字符串 S1,S2,,SH S_1,S_2,\ldots,S_H 表示。如果 SiS_i 的第 jj 个字符是 #,表示第 ii 行从上往下数第 jj 列从左往右数的单元格中有一个磁铁;如果是 .,表示该单元格是空的。

小高穿着铁甲,可以在网格中按以下方式移动:

  • 如果当前单元格的上下左右相邻单元格中有任何一个包含磁铁,他就完全不能移动。
  • 否则,他可以移动到上下左右相邻的任何一个单元格。
  • 但是,他不能离开网格。

对于每个没有磁铁的单元格,定义其自由度为从该单元格出发可以到达的单元格数量。找出网格中所有没有磁铁的单元格中最大的自由度。

这里,在自由度的定义中,"可以到达的单元格"指的是从初始单元格通过某种移动序列(可能为零次移动)可以到达的单元格。不需要存在一个移动序列能访问所有可到达的单元格。具体来说,每个没有磁铁的单元格本身总是包含在从该单元格可到达的单元格中。

输入格式

输入按以下格式从标准输入给出:

H H W W

S1 S_1

S2 S_2

\vdots

SH S_H

输出格式

输出所有没有磁铁的单元格中最大的自由度。

输入输出样例 #1

输入 #1

3 5
.#...
.....
.#..#

输出 #1

9

输入输出样例 #2

输入 #2

3 3
..#
#..
..#

输出 #2

1

说明/提示

样例 1 解释

(i,j)(i,j) 表示从上往下数第 ii 行从左往右数第 jj 列的单元格。如果小高从 (2,3)(2,3) 开始,可能的移动包括:

  • $(2,3)\rightarrow (2,4) \rightarrow (1,4) \rightarrow (1,5) \rightarrow (2,5)$
  • (2,3)(2,4)(3,4)(2,3) \rightarrow (2,4) \rightarrow (3,4)
  • (2,3)(2,2)(2,3) \rightarrow (2,2)
  • (2,3)(1,3)(2,3) \rightarrow (1,3)
  • (2,3)(3,3)(2,3) \rightarrow (3,3)

因此,包括他经过的单元格,他至少可以从 (2,3)(2,3) 到达九个单元格。

实际上,没有其他单元格可以到达,所以 (2,3)(2,3) 的自由度是 99

这是所有没有磁铁的单元格中最大的自由度,所以输出 99

样例 2 解释

对于任何没有磁铁的单元格,其相邻单元格中至少有一个包含磁铁。

因此,他无法从这些单元格中的任何一个移动,所以它们的自由度都是 11

所以输出 11

数据范围

  • 1 H,W 1000 1\leq\ H,W\leq\ 1000
  • H,W H,W 都是是整数
  • Si S_i 是长度为 WW 的由 .# 组成的字符串
  • 至少有一个单元格没有磁铁