Problem3004--Abbott的复仇[Abbott's Revenge,UVa816]

3004: Abbott的复仇[Abbott's Revenge,UVa816]

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 0  Solved: 0
[Status] [Submit] [Creator:]

Description

和大多数的迷宫类似,本题中的“箭头迷宫“,也是从一个交叉点到另一个交叉点直到到达目标交叉点。
”箭头迷宫“特殊的是,当从给定的方向到达一个交叉点时,在交叉点的入口附近给定一些符号,用来表示从行驶方向退出这个交叉点时的应该走的方向,方向包括向左、直行、向右或者是左、右、直行的混合。
Figure1给出了一个”箭头迷宫“的样例。
每个交叉点是通过(行,列)来表示的,左上角第一个交叉点就是用(1,1)。如图Figure1中所示,此迷宫的入口的交叉点是(3,1),目标交叉点是(3,3)。
从交叉点(3,1)向北开始走,当从(3,1)走到(2,1)时,(2,1)处的标志表示当你从南方(向北行驶)接近(2,1)时,你可以继续前进。继续前进将你带到(1,1)。当你从南方靠近时,(1,1)处的符号表示你只能通过右转退出(1,1)。这会让你转向东边,现在从(1,1)走向(1,2)。到目前为止,没有任何选择。当你继续从(1,2)到(2,2)到(2,3)到(1,3)时也是如此。然而现在,当你从(1,3)向西移动(1,2)时,你可以选择继续直行或向左转,继续直行会将带你往(1,1),而向左转将带你到(2,2)。
这个迷宫的实际(唯一)解决方案是以下交叉序列:(3,1)(2,1)(1,1)(1,2)(2,2)(2,3)(1,3) (1,2)(1,1)(2,1)(2,2)(1,2)(1,3)(2,3)(3,3)。
你的任务,就是编写一个程序,按照要求从入口交叉点开始,达到目标交叉点结束的解决方案,当然这个路径要尽可能的短。

Input

输入包含一个或者多个迷宫。
对于每个迷宫:
第一行,是一个不超过20个字母构成的字符串,表示这个迷宫的名称。
第二行,格式是:起始行 起始列 起始方向 目标行 目标列
由于这一题的最大规模是9*9的迷宫,所以所有的表示行和列的数字范围是1~9,起始方向用字母“N、S、E、W”表示,分别代表北、南、东、西。
接下来多行,格式是:两个整数、一个或多个字符组和一个星号标记,同样的它们之间都是用空格隔开。两个整数表示了此交叉点在迷宫中的行和列,字符组表示了这个交叉点的标识符号,字符组中的第一个字符是“N S E W”中的一个,表示此标识符在哪个方向可见,例如“S”表示向南行驶时看到的标识(也就是交叉点的北入口处的标识)。第一个字符后面是1到3个字符,叫箭头字符,用“L F R”表示,分别代表向左、向前、向右。
“*”表示此行输入结束。当输入为一行“0”时表示此迷宫描述结束,开始下一个迷宫的描述。当遇到单独的一行“END”时表示所有输入结束。

Output

对于每个迷宫,第一行输出迷宫的名称
接下来一行或者多行,行首有两个空格,然后描述从开始交叉点到目标交叉点的路径。路径中的每个交叉点用(行,列)表示,交叉点与交叉点之间用空格隔开,一行最多输出10个交叉多,多余10个交叉点的就换行。
如果此迷宫无解则输出一行“No Solution Possible”,注意行首也是有两个空格。
输入样例的第一个迷宫就是Figure1所示的迷宫。

Sample Input Copy

SAMPLE
3 1 N 3 3
1 1 WL NR *
1 2 WLF NR ER *
1 3 NL ER *
2 1 SL WR NF *
2 2 SL WF ELF *
2 3 SFR EL *
0
NOSOLUTION
3 1 N 3 2
1 1 WL NR *
1 2 NL ER *
2 1 SL WR NFR *
2 2 SR EL *
0
END

Sample Output Copy

SAMPLE
(3,1) (2,1) (1,1) (1,2) (2,2) (2,3) (1,3) (1,2) (1,1) (2,1)
(2,2) (1,2) (1,3) (2,3) (3,3)
NOSOLUTION
No Solution Possible

Source/Category

BFS UVA level6