#P1817. Traffic Jam

    ID: 818 传统题 1000ms 256MiB 尝试: 4 已通过: 1 难度: 10 上传者: 标签>搜索BFS搜索与剪枝启发式搜索模拟POJ MonthlySoutheast USA 1999

Traffic Jam

描述
交通堵塞是所有司机的噩梦。没有人喜欢被困在过于拥挤的街道上,当汽车缓慢行驶,甚至完全停滞不前时。专业司机经常面临交通堵塞,ACM的卡车司机也不例外。你能帮助司机找到脱离交通堵塞的路吗?

我们可以在一个 6×66 \times 6 的方格上模拟一个小而复杂的交通堵塞。车辆(汽车和卡车)散布在方格的整数位置,如下所示。两种类型的车辆都是 1 格宽。汽车是 2 格长,卡车是 3 格长。车辆可以是水平(东西方向)或垂直(南北方向)排列在方格上。 车辆不能穿过彼此,不能转弯,也不能越过方格的边缘。车辆只能在它们的方向上移动(水平的车辆不能垂直移动,反之亦然),前提是它们没有被其他车辆或方格边缘挡住。每次移动只能移动一辆车,但可以尽量多地移动,只要有足够的空白空间。

我们的目标是通过不断移动车辆,直到某辆横向排列的车辆(你的车,即上图中的黑色车)离开方格的最右侧(东侧),认为它成功逃脱了交通堵塞。你需要编写一个程序,找到逃脱所需的最少移动次数。

输入
输入文件包含一个或多个输入场景。每个场景开始时包含一个整数 nn1n101 \leq n \leq 10,表示场景中的车辆数量。接下来是 6 行输入,每行包含 6 个字符。每个字符要么是点号("."),表示空白格,要么是小写字母,表示一辆车辆。你的车始终是横向排列并用 "x" 字符表示。其他车辆使用字母从 "a" 开始顺序编号。

最后一个场景后跟一个包含单个零的行。

输出
对于每个场景,输出一行,格式为:“Scenario #K requires X moves.”,其中 K 是场景编号(从 1 开始),X 是成功逃脱交通堵塞所需的最少移动次数。

如果无法逃脱,输出“你在场景 #K 中被困了。”

输入数据 1

8
aa...b
c..d.b
cxxd.b
c..d..
e...ff
e.ggg.
8
abbc..
a..c..
axxc..
..gddd
..g..e
..fffe
0

输出数据 1

Scenario #1 requires 8 moves.
Scenario #2 requires 25 moves.

来源
POJ Monthly, Southeast USA 1999