AT_maximum_2013_i 実績: ヘビマスター
题目描述
你正在玩一种经典的蛇游戏。游戏中,你需要控制蛇,使蛇头不与墙壁或自身发生碰撞的条件下,吃掉随机出现的食物。每吃一次食物,蛇就会增长一个长度单位。
这个游戏有一个成就系统,如果在游戏中完成特定挑战,就能解锁对应的成就。你当前的目标成就是:要让这条蛇像一笔画一样,遍历地图上所有可以移动的格子。
游戏中的蛇长度为 $L$,它由 $L$ 个连续格子构成,每个格子代表蛇身上的一节。蛇的节段从 1 到 $L$ 编号,编号从头到尾依次排列。蛇的第 $i$ 个节段始终和第 $i-1$ 个节段相邻(对于 $i$ 取值范围是 $2 \ldots L$)。两个格子相邻的定义是它们之间有一条公共边。
蛇在地图中可以向前、向右或向左移动一格。移动的方向是根据蛇的第 2 个节段与第 1 个节段(即蛇头)之间的关系来决定的。
当蛇的头部移动时,整条蛇的身体会跟随蛇头以前走过的路径移动。也就是说,当蛇头移动一格时,第 $i$ 个节段会移动到之前第 $i-1$ 个节段所在的位置(对 $i$ 范围 $2 \ldots L$ 成立)。
在这个挑战中,地图上没有食物出现,因此蛇的长度从一开始就不再变化。请判断,给定蛇的长度以及地图的配置,你能否在不撞到墙壁或自身的情况下,让蛇遍历所有可移动的格子且只经过一次。
输入包括多组数据,以三个零结尾表示输入结束。每组数据的格式如下:
> $L$ $H$ $W$ $m(1, 1)$ $m(1, 2)$ ... $m(1, W)$ $m(2, 1)$ $m(2, 2)$ ... $m(2, W)$ : $m(H, 1)$ $m(H, 2)$ ... $m(H, W)$
$L$ 是蛇的长度,$H$ 和 $W$ 分别表示地图的行数和列数。保证 $2 \leq L \leq 9$,$1 \leq H, W \leq 8$。
接下来 $H$ 行描述地图的状态。每个格子用一个字符表示,含义如下:
- `#`: 墙壁(不能通行)
- `.`: 空地(可以通行)
- `1`..`9`: 蛇的初始位置(可以通行)
`1` 所在的格子已经访问过,其他数字所在的格子没有访问过。
已知地图的最外圈全部是墙壁。
对于每组数据,如果你能够让蛇遍历所有可通行的格子,输出 `Yes`;否则,输出 `No`。
```
2 5 4
####
#12#
#..#
#..#
####
2 5 4
####
#12#
#.##
#..#
####
8 7 7
#######
#...#.#
#1#.#.#
#2..#.#
#3###.#
#45678#
#######
9 7 7
#######
#...#.#
#1#.#.#
#2..#.#
#3###9#
#45678#
#######
0 0 0
```
输出结果:
```
Yes
No
Yes
No
```
- 在第一组数据中,通过「下下右上上」的路径可以遍历所有可通行的格子。
- 在第二组数据中,通过「下下右」的路径无法到达右上角的格子。
- 在第三组数据中,通过路径「上右右下下左左下下右右右右上上上上」可以遍历所有可通行的格子。
- 在第四组数据中,通过路径「上右右下下左左」时会在第七次移动时,第 1 个节段和第 9 个节段发生碰撞。
**本翻译由 AI 自动生成**
输入格式
无
输出格式
无