#P7904. 火烧の云
火烧の云
题目描述
乡间小路可以近似理解成 的矩阵,道路有许多种,这里只列举其中的一小部分:
#
:水池,无法通行。|
:直行类道路,竖直方向只能直行,水平方向只能左转、右转。-
:直行类道路,水平方向只能直行,竖直方向只能左转、右转。/
:转弯类道路,竖直方向只能右转,水平方向只能左转。\
:转弯类道路,竖直方向只能左转,水平方向只能右转。.
:四岔路口,可以直行、左转、右转。S
:入口,从乡间之外进入入口不需要时间。E
:出口,从出口到达乡间之外不需要时间。
前进类道路:到此格之后方向必须花费时间转向 ?
,如果来向就是 ?
方向则不花费时间并必须跳一格。
<
:? = 西
。>
:? = 东
。^
:? = 北
。v
:? = 南
。
简单来说,就是和这类道路逆向时不能走,垂直于它的方向时花时间转到它的方向,顺着它的方向时就能够不花时间且必须一次性走两格。
直行类道路、转弯类道路、四岔路口、前进类道路依次花费 个单位时间。
由于乡间的构造奇特,可能 不止一个 入口和出口。
求任意入口到任意出口的 最短时间,出入时的方向不作要求。
题意简述
给定一张 的地图,求起点 S
到终点 E
的最短时间,注意起点和终点可能有多个。
输入格式
第一行输入六个用空格隔开的正整数 。
接下来输入一个 行 列的字符矩阵,将会包含上述 种字符:#
、|
、-
、 /
、\
、.
、<
、>
、^
、v
、S
、E
。
输出格式
输出从起点到达终点所需花费的最少时间,若无法到达终点,输出无解信息 -1
。
3 3 6 5 4 3
S..
...
..E
12
3 3 1 2 7 8
S.E
\-/
...
5
3 3 1 2 7 8
SEE
\-/
SSS
0
1 4 6 5 4 3
S>#E
0
2 2 6 5 4 3
#E
S^
3
1 3 1 2 7 8
S#E
-1
提示
样例说明
样例 #1:从起点 开始,到终点 的路径为:$(1,1)\rightarrow(1,2)\rightarrow(1,3)\rightarrow(2,3)\rightarrow(3,3)$。经过了 个四岔路口,每个的代价是 ,沿途的代价:。
样例 #2:从起点 开始,到终点 的路径为:$(1,1)\rightarrow(2,1)\rightarrow(2,2)\rightarrow(2,3)\rightarrow(1,3)$。经过 个转弯类道路和 个直行类道路,沿途的代价:。
样例 #3:选择 的 S
和 的 E
,出入口相邻,代价为 。
样例 #4:通过前进类道路 >
可以跳一格直接到达 E
,跳一格时不花费时间。
样例 #5:前进类道路也可以用于转向,此时的功能与 /
相同,转向同样需要时间。
样例 #6:这里 #
不能通过,因此不存在 S
到 E
的道路。
数据范围
子任务编号 | 分值 | 特殊性质 | |
---|---|---|---|
字符 S 、E 的数量 |
|||
本题请注意常数因子对程序效率的影响。
对于 的数据:,。