#P16876. [GKS 2022 #B] Hamiltonian Tour
[GKS 2022 #B] Hamiltonian Tour
题目描述
Hamilton 是加拿大多伦多附近的一座城市,也是一个适合徒步旅行的好地方。
在本问题中,Hamilton 被表示为一个由 行 列单位单元格组成的网格,每个单元格要么是空的(用 * 表示),要么包含一座建筑(用 # 表示)。第 行第 列的单元格记为 ,其中 ,。不能进入包含建筑的单元格,且只能移动到与当前单元格共享一条边的相邻单元格(不仅仅是角点)。网格满足:如果将网格均匀划分为 的单元格块,则每个块中的四个单元格要么全部为空,要么全部被建筑占据。将由单元格 、、 和 组成的块记为 ,其中 ,。
Grace 是一位游客,她想参观 Hamilton 中的所有空单元格。Grace 当前位于单元格 中。重复访问同一个单元格可能会让她感到无聊。因此,Grace 希望恰好访问每个空单元格一次,并最终回到单元格 。你能帮助 Grace 提供一个字符串(由方向移动字符 组成,分别表示向北、向东、向南、向西移动一个单位),使得 Grace 按照该字符串移动,能够访问每个空单元格一次,并最终回到 。
输入格式
输入的第一行给出测试用例的数量 。接下来有 个测试用例。
每个测试用例的第一行包含两个整数 和 。
接下来的 行,每行包含 个字符。
其中第 行第 个字符表示块 ,该块由以下四个单元格组成:、、 和 。
如果 ,则 中的四个单元格全部被建筑占据。
否则,如果 ,则 中的四个单元格全部为空。
输出格式
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 开始), 是问题的答案,具体如下:
如果无解,则 应为 IMPOSSIBLE。否则, 应为一个由集合 中字符组成的序列,表示一条有效路径中的单位移动(分别对应北、东、南、西),从 出发,如上文所述。
注意,你的最后一步移动应使你回到 ;这一步不算作重复访问同一单元格。
如果存在多个有效解,你可以输出其中任意一个。
3
1 1
*
2 2
**
*#
3 4
****
*#*#
****
Case #1: SENW
Case #2: SSSENNEENWWW
Case #3: ESSSSEEENNNWWNEEEEESWWSSSEESWWWW
3
3 1
*
*
#
1 3
*#*
3 4
**#*
**#*
****
Case #1: SSSENNNW
Case #2: IMPOSSIBLE
Case #3: ESSSSENNNNESSSSEEENNNNESSSSSWWWW
提示
样例输出展示了一组答案。其他答案也可能存在。
在样例 #1 中,Grace 将按照路径 、、、 移动,最后回到 。注意 ESWN 是另一个可能的有效答案。
下图展示了样例 #1 的一种可能路径。
:::align{center}
:::
下图展示了样例 #2 的一种可能路径。
:::align{center}
:::
限制条件
。
。
。
网格中的所有字符均来自集合 。
每个测试用例输入网格的第一行的第一个字符为 *,即 。
测试集 1
块中包含建筑当且仅当其行号和列号均为偶数。即 $B_{i,j} = \# \iff ((i \bmod 2 = 0) \land (j \bmod 2 = 0))$。
测试集 2
无额外限制。
翻译由 DeepSeek V4 Pro 完成