5466 - Abbott’s Revenge

通过次数

0

提交次数

0

时间限制 : 1 秒
内存限制 : 256 MB

在1999年的World Finals中有一个基于Dice Maze(骰子迷宫)的题目。在出题人编写那道题目的时候,他们并没有发现这种迷宫的创意来源。然而在那场比赛结束不久,创作了大量的这种迷宫的Robert Abbott先生,联系了比赛主办方并确认自己是骰子迷宫的原作者。我们很遗憾没有在去年的题目描述中感谢Abbott先生的原创意,但我们很高兴Abbott先生主动为今年的比赛提供他原创的、未公开的“步行通过的箭头迷宫”。
  与大多数的迷宫相同,箭头迷宫也是每次从一个路口走到另一个路口,直到到达终点。在每个路口处,如果你从某个方向进入了该路口,那么路口的地面上在靠近你的方向会画有一组箭头,它们相对于你的方向可以是向左,向前,向右,或者是它们的任意组合。
  图1描述了一个箭头迷宫。每个路口用二维坐标(x,y)表示,以左上角的路口为(1,1)。在图1给出的迷宫中,起点的坐标是(3,1),终点的坐标是(3,3)。在你开始后,你只能向北走1步到达(2,1)。由于你是从南边到达(2,1)这一点的,而这一点在南边的箭头是向前指的,所以你只能继续向前走到达(1,1)。在此之后,由于你是从南边到达了(1,1),这一点在南边的箭头是向右指的,所以你也只能向右拐,到达(1,2)。到目前为止,你还没有做出任何选择。以此类推,你会接着依次经过(2,2) (2,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)。
  你需要写一个程序解决这个迷宫。“解决”的意义是:只要迷宫是可解的,你就要找到一条路线,它必须在起点沿指定的方向走出,并最终到达终点,当然,路线的长度需要是所有方案中最短的。

15660451401356.png

输入

输入文件包括一个或多个箭头迷宫。每个迷宫描述的第一行是这个迷宫的名称,保证它只由数字和字母组成且长度不超过20。接下来的一行依次包含了起点的坐标,起始时方向,目标点的坐标,以空格隔开。本题的迷宫最大尺寸为9×9,所以行与列的编号均为1到9。起始时的方向为N,S,E,W之一,分别代表北、南、西、东。
  剩下的若干行按照以下格式输入:一对整数,若干字符串,以星号(*)结束,以空格隔开。每一行代表一个路口,一对整数表示路口的坐标。对于每一个字符串,第一位为N,S,E,W之一,接下来若干位只可能包含L,F,R,分别代表向左,向前,向右。这个字符串的含义是:朝向某个方向进入该路口(所以箭头被画在这个路口的相反方向),接下来就只能向某个方向继续行走。
  对于每个迷宫,以0作为一行的结束,从接下来一行开始就是一个新的箭头迷宫。输入文件以单独的一行END作为结尾。

输出

对于每个箭头迷宫,应该先输出它的名字,然后接下来若干行,输出一个路径,格式如问题描述中所述;或者输出"No Solution Possible"。迷宫的名字应从第1列开始,而其余所有的行都从第3列开始,即行首有2个空格。对于输出的每个路径,除最后一行外,每行须输出恰好10个路口(坐标)。
  在下面的样例中,输入的第一个迷宫是图1中的迷宫。
  注意,在下面的样例输出当中,除了SAMPLE和NOSOLUTION两行以外,其余的行首都需要空两格!(由于格式化问题未能显示出来)

样例

输入

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

输出

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

提示

数据规模和约定

  设T为数据组数:对于30%的数据,T=1;对于60%的数据,T≤100;对于100%的数据,T≤1000。

来源

蓝桥杯