#P1817. Traffic Jam
Traffic Jam
描述
交通堵塞是所有司机的噩梦。没有人喜欢被困在过于拥挤的街道上,当汽车缓慢行驶,甚至完全停滞不前时。专业司机经常面临交通堵塞,ACM的卡车司机也不例外。你能帮助司机找到脱离交通堵塞的路吗?
我们可以在一个 的方格上模拟一个小而复杂的交通堵塞。车辆(汽车和卡车)散布在方格的整数位置,如下所示。两种类型的车辆都是 1 格宽。汽车是 2 格长,卡车是 3 格长。车辆可以是水平(东西方向)或垂直(南北方向)排列在方格上。
车辆不能穿过彼此,不能转弯,也不能越过方格的边缘。车辆只能在它们的方向上移动(水平的车辆不能垂直移动,反之亦然),前提是它们没有被其他车辆或方格边缘挡住。每次移动只能移动一辆车,但可以尽量多地移动,只要有足够的空白空间。
我们的目标是通过不断移动车辆,直到某辆横向排列的车辆(你的车,即上图中的黑色车)离开方格的最右侧(东侧),认为它成功逃脱了交通堵塞。你需要编写一个程序,找到逃脱所需的最少移动次数。
输入
输入文件包含一个或多个输入场景。每个场景开始时包含一个整数 ,,表示场景中的车辆数量。接下来是 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