P14614 [2019 KAIST RUN Fall] Bigger Sokoban 40k
题目描述
**推箱子**(Sokoban)是一款著名的益智游戏,玩家在 $N \times M$ 大小的网格中移动,并将 $1 \times 1$ 大小的箱子推到 $1 \times 1$ 大小的目标位置。
**更大推箱子**(Bigger Sokoban)是推箱子的一种可能变体,但箱子和目标位置的尺寸都大于 $1 \times 1$。本题特别使用 $2 \times 2$ 的尺寸作为箱子和目标位置的大小。
更大推箱子的规则与推箱子相同。网格中的每个格子是空地或墙壁。一些 $2 \times 2$ 的空地区域各包含一个 $2 \times 2$ 大小的箱子,而一些 $2 \times 2$ 的空地区域各被标记为 $2 \times 2$ 大小的目标位置。
玩家位于网格中,可以向上、下、左、右移动到相邻的空地格子,但不能穿过墙壁、箱子或网格边界。如果玩家试图移动到一个箱子的位置,箱子会被向该方向推到相邻的格子。箱子不能被推到其他箱子、墙壁或网格边界上,且箱子不能被拉动。箱子的数量等于目标位置的数量。当所有箱子都位于目标位置上时,谜题即被解决。
你的任务是设计一个需要至少 **40,000** 步才能解决的更大推箱子网格。为了使情况更简单,网格必须满足以下约束:
- $1 \leq N, M, N+M \leq 100$。
- 网格包含 **一个** 箱子和 **一个** 目标位置。
- 玩家、箱子和目标位置必须互不重叠。
输入格式
本题没有输入。
输出格式
第一行输出两个以空格分隔的整数 $N, M$,表示网格的尺寸。
接下来的 $N$ 行,每行输出一个长度为 $M$ 的字符串,描述网格的每一行。每个字符串必须由 $\texttt{.}$、$\texttt{\#}$、$\texttt{P}$、$\texttt{B}$、$\texttt{S}$ 组成;每个字符分别表示空地、墙壁、玩家、箱子、目标位置。
网格必须恰好包含一个 $\texttt{P}$,恰好四个 $\texttt{B}$,以及恰好四个 $\texttt{S}$。$\texttt{B}$ 和 $\texttt{S}$ 必须各自形成一个 $2 \times 2$ 的正方形。当然,网格必须是可解的。
请注意,样例输出仅用于演示格式正确的输出。由于它可以在少于 40,000 步内解决,因此不是一个正确答案。