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