问题1175--勇士

1175: 勇士

时间限制: 1 Sec  内存限制: 256 MB
提交: 0  解决: 0
[提交] [状态] [讨论版] [命题人:]

题目描述

Einstein最近迷上了一款手机益智游戏Wappo,但是由于IQ和RP等诸多原因,他一直无法通关,他希望你编一个程序来玩这个游戏。

Wappo的游戏规则是这样的:在一张m×n的地图上,你可以控制勇士每秒向上、下、左、右任意方向移动一格,之后怪兽会朝着你的方向移动至多两格。

注意,怪兽会优先横向走,勇士和怪兽都不会穿墙。

勇士的目的地就是桥头,但是千万不能被怪兽吃掉。

陷阱是很有用的东西(一格),勇士是不能进入陷阱的,但是如果你的IQ足够高,就可以把怪兽引入陷阱,在接下来你的三次移动中,怪兽将无法移动,三秒后恢复正常。

现在给你地图的信息,请你用最少的步数走到桥上。

输入

第一行是两个正整数m和n(m,n<=20),表示地图的大小为m×n.
接下来是n行,每行m个整数,表示一个格子周围墙的信息。其中
1-上方有墙
2-左方有墙
4-右方有墙
8-下方有墙
例如,一个格子的左、上、右都有墙,那么代表这个格子的整数是2+1+4=7。

接下来是n行,每行m个字符,表示一个格子里的其他信息,其中
.-nothing
S-勇士的初始位置
W-陷阱
M-怪兽的初始位置
E-目的地,即桥头
其中S,M,E均保证只出现一次。

输出

输出包含若干行,前r行为最少步数走到桥头的走法,每行为up,down,left,right中的一个,表示勇士的走法。

最后一行输出最少步数r,格式见样例。

若存在多解,按照上左右下的优先顺序行走。

若无法走到桥头,只输出一行“impossible”。

样例输入 Copy

6 6
0 8 8 8 8 0
4 3 1 1 5 2
4 2 0 4 6 2
4 2 0 4 6 2
4 10 8 8 12 2
0 1 1 1 1 0
......
.S..W.
....M.
......
...E..
......

样例输出 Copy

right
right
down
down
down
total steps:5

提示

【数据规模】
对于30%的数据满足:n≤5,且没有墙。
对于60%的数据满足:n≤5,且没有陷阱。
对于100%的数据满足:n≤20。
【友情提醒】
1)怪物掉进了陷阱后,如果时间到,则不会接着再掉进去。
2)怪物掉进了陷阱,时间到了,如果没动,则不算再掉入。
3)一旦勇士到达桥头,那么他就胜利了,不需要再计算怪兽。
4)怪兽在不能横着走的情况下会竖着走,如果不能竖着走就不动(即如果勇士在它左上角,则它只会向左或向上)。

来源/分类