P13327 [GCJ 2012 #2] Descending in the Dark

题目描述

你正站在珠穆朗玛峰的山坡上。你需要在冻僵之前找到一个避难所,而现在天已经黑了!你该怎么办? 好消息是,你已经记住了整座山的布局。这是一张网格图,其中有些格子无法通过,另一些格子包含可以过夜的山洞。坏消息是,你并不知道自己所在的位置,并且由于坡度太陡,你无法往上爬。你只能向左、右或向下移动。 下面是一个布局示例,'.' 表示可通行的格子,'#' 表示不可通行的格子,数字表示山洞: ``` ###### ##...# #..#.# #...## #0#..# ####1# ###### ``` 由于天太黑了,你只能按照一个*计划*行动,这是一串指令,每条指令都让你向左、右或下移动一格。如果某条指令会让你走到一个可通行的格子或山洞,你就执行它。如果会走到一个不可通行的格子,你就必须忽略这条指令。不论是否执行,你都会继续下一步,直到计划全部执行完毕。 为了帮助你下山,你希望对每个山洞 $\mathbf{C}$ 得到两个信息: * 可以从哪些格子到达山洞 $\mathbf{C}$?我们用 $\mathbf{S}_{\mathbf{C}}$ 表示这些格子的集合,$\mathbf{n}_{\mathbf{C}}$ 表示这些格子的数量。 * 是否存在一个计划,使得从 $\mathbf{S}_{\mathbf{C}}$ 的任意一个格子出发,最终都能到达山洞 $\mathbf{C}$?如果存在,我们称该山洞是**Lucky** 的。 注意,在按计划行动的过程中,你可能会经过多个山洞。唯一重要的是你最终**停留**在哪个格子,而不是途中经过了哪些山洞。 例如,在上面的布局中,山洞 0 是 Lucky 的。有 9 个格子可以到达它(包括它本身),计划 "left-left-down-down-down-left-down" 能保证从这些格子的任意一个出发,最终都停在该山洞。

输入格式

输入的第一行为测试用例数 $\mathbf{T}$。接下来有 $\mathbf{T}$ 组测试数据,每组首先一行两个整数 $\mathbf{R}$ 和 $\mathbf{C}$,表示山的行数和列数。 接下来有 $\mathbf{R}$ 行,每行 $\mathbf{C}$ 个字符,描述山的布局。与上例一样,'#' 表示不可通行的格子,'.' 表示可通行的格子,'0'-'9' 表示山洞(也是可通行的格子)。

输出格式

对于每个测试用例,首先输出一行 "Case #$x$:",其中 $x$ 为测试用例编号(从 1 开始)。对于每个山洞 $\mathbf{C}$(从 0 开始递增),输出一行 "$\mathbf{C}$: $\mathbf{n}_{\mathbf{C}}$ $\mathbf{L}_{\mathbf{C}}$"。其中 $\mathbf{C}$ 是山洞编号,$\mathbf{n}_{\mathbf{C}}$ 是能到达该山洞的格子数,$\mathbf{L}_{\mathbf{C}}$ 为 "Lucky" 或 "Unlucky",如上所述。

说明/提示

**样例说明** 在第一个样例中,下面是一些对 Lucky 山洞可用的计划: - 对于山洞 0,可以使用空计划。如果你能到达该山洞,说明你已经在正确的位置! - 对于山洞 1,可以使用计划 right-down-left。 - 对于山洞 3,可以使用计划 right-right-left-down-down-down-left。 **限制条件** - 山洞数量在 1 到 10 之间。 - 若有 $d$ 个山洞,则编号为 $\{0, 1, \ldots, d-1\}$,且不会有重复编号。 - 山的布局边界上的所有格子都是不可通行的。 - $1 \leq T \leq 20$ **测试集 1(8 分,结果可见)** - $3 \leq R, C \leq 10$ **测试集 2(30 分,结果隐藏)** - $3 \leq R, C \leq 60$ 翻译由 ChatGPT-4.1 完成。