AT_tenka1_2012_12 ゆうびんやさんのお花畑
题目描述
在一个精灵居住的村庄里,有一位名叫「邮递员」的小精灵专门负责送信。村庄是一个由网格组成的矩形,其中包括房屋、空地和树木。
邮递员在送信过程中必须遵守以下五项规则:
1. 必须进入村庄中的每一栋房屋并送达邮件。
2. 不允许穿过树木,邮递员只能通过空地和房屋,并且不能离开村庄的边界。
3. 允许多次经过同一个空地。
4. 只能从房屋相邻的四个方向(东、西、南、北)中是空地的方向进入房屋。
5. 进入和离开房屋只能从同一个方向进行,禁止穿过房屋。
例如,合法的送信路线可以像图 $2(a)$ 中的橙色线所示。然而,图 $2(b)$ 显示的路线则违反了不允许穿过房屋的规则。
精灵们非常热爱鲜花,他们希望将邮递员的送信路线以外的所有空地都变成花田。你的任务是计算出能够变成花田的最大空地数量。如果没有符合规则的送信路线,则输出 `-1`。
### 输入格式
输入数据包含 $ H+1 $ 行:
1. 第一行包含两个用空格分隔的整数 $ H $ 和 $ W $,分别表示村庄的高度和宽度,范围为 $4 \leq H \leq 10$ 和 $4 \leq W \leq 10$。
2. 接下来的 $ H $ 行是村庄的地图,每行包含 $ W $ 个字符,表示每个格子的类型:
- `H`:格子上有房屋。
- `#`:格子上有树木。
- `.`:格子为空地。
### 输出格式
输出一个整数,表示可以变成花田的最大空地数量。如果没有符合规则的送信路径,则输出 `-1`。请注意,最后输出后需要换行。
### 示例
```
4 4
...H
#H..
...#
H..H
```
输出:
```
5
```
解释:可以按某种路径送信,剩下 $5$ 个空地可以变成花田。
```
4 4
....
....
.HHH
....
```
输出:
```
10
```
解释:即使房屋相邻,它们也不能直接通过房屋相通,因此只有靠近房屋的某些空地不能变成花田,最终有 $10$ 个空地可种花。
```
4 4
...H
.#.#
.#.#
H#.H
```
输出:
```
0
```
解释:所有空地都被用作送信路径,无法种花。
```
4 4
HH.H
H##.
.##.
H..H
```
输出:
```
-1
```
解释:无法依据规则送信,因为某些房屋不可达且需要穿过房屋。
```
10 10
..##.H....
.H.#......
...#####..
##......#.
.#...#.H..
.....#....
.##H..####
..##....H.
.H..#.....
...#......
```
输出:
```
36
```
解释:通过某种合法路径送信后,还有 $36$ 个空地可以变成花田。
**本翻译由 AI 自动生成**
输入格式
无
输出格式
无