AT_abc427_e [ABC427E] Wind Cleaning
题目描述
有一个 $H$ 行 $W$ 列的网格。设 $(i, j)$ 表示从上往下第 $i$ 行、从左往右第 $j$ 列的格子。
高桥位于这个网格中的某个格子,网格中有些格子上有垃圾。
每个格子的状态由 $H$ 个长度为 $W$ 的字符串 $S_1, S_2, \ldots, S_H$ 给出,其中 $S_{i, j}$ 表示 $S_i$ 的第 $j$ 个字符,含义如下:
- 如果 $S_{i, j} = \text{`T`}$,那么 $(i, j)$ 格子是高桥所在的位置;
- 如果 $S_{i, j} = \text{`#`}$,那么 $(i, j)$ 格子上有垃圾;
- 如果 $S_{i, j} = \text{`.`}$,那么 $(i, j)$ 格子为空,没有垃圾。
高桥所在的格子上没有垃圾。
他可以重复执行如下操作:
- 选择四个方向之一(上、下、左、右),并将所有垃圾同时向该方向移动一格。若垃圾移出网格,则该垃圾会消失;若垃圾移到他所在的格子,他就会变脏。
请判断,能否在不让他变脏的情况下,让所有垃圾都消失。如果可以,输出所需的最小操作次数;否则输出 $-1$。
输入格式
输入按以下格式从标准输入读入:
> $H$ $W$ $S_1$ $S_2$ $\vdots$ $S_H$
输出格式
如果高桥可以在不变脏的情况下让所有垃圾都消失,输出最小操作次数。否则输出 $-1$。
说明/提示
### 样例解释 1
高桥可以用三次操作使所有垃圾消失,过程如下:
- 第一次选择“上”,操作后垃圾位于 $(1, 1)$ 和 $(2, 4)$。
- 第二次选择“右”,操作后垃圾位于 $(1, 2)$。
- 第三次选择“上”,操作后所有垃圾消失。
### 数据范围
- $2 \leq H, W \leq 12$
- $S_i$ 为长度为 $W$ 的只包含 `T`、`#` 和 `.` 的字符串
- 恰有一个 $(i, j)$ 使 $S_{i, j} = \text{`T`}$
- 至少有一个 $(i, j)$ 使 $S_{i, j} = \text{`#`}$
由 ChatGPT 5 翻译