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

输入格式

输出格式