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 自动生成**

输入格式

输出格式