#aBC358F. [ABC358F] Easiest Maze
[ABC358F] Easiest Maze
AT_abc358_f [ABC358F] Easiest Maze
题目描述
すぬけ君打算在 AtCoder Land 建造一个新的迷宫作为亮点项目。迷宫可以表示为一个纵向 行、横向 列的网格,右上角格子的上边是入口,右下角格子的下边是出口。すぬけ君可以通过在相邻格子之间适当设置墙壁来构建迷宫。
すぬけ君非常喜欢简单的迷宫,因此他希望从入口到出口的路径没有任何分支,并且恰好经过 个格子。请判断是否可以构建这样的迷宫,如果可以,请构建出其中一种方案。
例如,下图中 ,实线表示墙壁的位置(除入口和出口外,外周必定有墙壁)。此时,从入口到出口的路径没有任何分支,且恰好经过了 个格子。

具体要求如下:
有一个纵向 行、横向 列的网格。第 行第 列的格子记为 。你可以决定是否在每对相邻格子之间放置墙壁。请判断是否可以通过合理设置墙壁,使得满足以下条件,并在可能的情况下给出一种构造方案。
考虑一个有 个顶点的无向图 。 的每个顶点用一对整数 唯一标记。对于两个不同的顶点 ,如果 且这两个格子之间没有墙壁,则它们之间有一条边。
条件:存在一条包含 个顶点、连接 和 的简单路径,并且包含 和 的连通分量仅由这条路径组成。
输入格式
输入通过标准输入给出,格式如下:
输出格式
如果不存在满足条件的墙壁配置,则输出 No。如果存在,则输出其中一种方案,格式如下。若有多种满足条件的墙壁配置,输出任意一种均可。
由于输出格式较为复杂,请参考下方的输出示例。
Yes +++++...+++S+ +o?o?...?o?o+ +?+?+...+?+?+ +o?o?...?o?o+ +?+?+...+?+?+ ⋮ +o?o?...?o?o+ +?+?+...+?+?+ +o?o?...?o?o+ +++++...+++G+
其中,S、G、+、o 分别表示入口、出口、墙壁、格子。格子与格子之间的 ? 表示可以放置墙壁的位置。对于横向相邻的两个格子之间的 ?,若放置墙壁则用 |,不放则用 .。对于纵向相邻的两个格子之间的 ?,若放置墙壁则用 -,不放则用 .。
具体说明如下:
- 输出共 行,第 行输出字符串
Yes,第 行到第 行按如下方式输出,每行长度为 。- 第 行输出 个
+,S,+,依次连接。 - 第 行():
+,o,,o,,,,o,+,依次连接。 表示 和 之间,若放墙壁则为|,否则为.。 - 第 行():
+,,+,,+,,+,,+,依次连接。 表示 和 之间,若放墙壁则为-,否则为.。 - 第 行输出 个
+,G,+,依次连接。
- 第 行输出 个
输入输出样例 #1
输入 #1
3 3 7
输出 #1
Yes
+++++S+
+o.o.o+
+.+-+-+
+o.o.o+
+-+-+.+
+o.o|o+
+++++G+
输入输出样例 #2
输入 #2
3 3 2
输出 #2
No
输入输出样例 #3
输入 #3
4 1 4
输出 #3
Yes
+S+
+o+
+.+
+o+
+.+
+o+
+.+
+o+
+G+
说明/提示
数据范围
- 输入均为整数
样例解释 1
与题目描述中的图示墙壁配置相同。
由 ChatGPT 4.1 翻译