When two sets of eyes meet,

2 secs 1024 MB
programgmg2's icon programgmg2

When two sets of eyes meet,

問題文

とある世界では、「魔物使い同士の目が合ったら、その場でお互いの連れているモンスターを戦わせなければならない。」という掟があるんだとか。

魔物使いであるmoguさんは、冒険の途中で連れているモンスターが傷を負ってしまったので、近くの町の宿へ行って休ませたいと考えている。しかし、町への道中には冒険中の魔物使いがいるため、できるだけ彼らと目を合わせないようにしたい。

HHWW 列のグリッドがあり、iijj 列 のマスを マス (i,j)(i,j) と定める。また、ii が小さくなる方向を ii が大きくなる方向を jj が小さくなる方向を 西jj が大きくなる方向を と定める。

moguさんは今、マス (1,1)(1,1) におり、町は マス (H,W)(H,W) にある。 冒険中の魔物使いは このグリッド内に NN 人おり、魔物使い j(1iN)j(1 \leq i \leq N)Sri,ci=S_{r_i,c_i} = ^ のとき北を、Sri,ci=S_{r_i,c_i} = v のとき南を、Sri,ci=S_{r_i,c_i} = < のとき西を、Sri,ci=S_{r_i,c_i} = > のとき東を向いている。

はじめ、moguさんはどの魔物使いとも戦闘していない。moguさんが魔物使いの向く方向にいたとき、moguさんとその魔物使いで戦闘が発生する。該当する魔法使いが複数いる場合、その全員とそれぞれ戦闘が発生するものとする。ただし、moguさんと戦闘したことのある魔物使いとの再戦が発生することはない。

moguさんと魔物使いが同じグリッド内にいることはできないものとする。moguさんが上下左右のマスへの移動を繰り返すことで町へ向かう際の、戦闘回数の最小値を求めよ。

制約

  • 3H,W3 \leq H,W
  • HW1000HW \leq 1000
  • 1N101 \leq N \leq 10
  • Si,j=S_{i,j} = . , ^ , v , < , > (1iH,1jW)(1 \leq i \leq H , 1 \leq j \leq W)
  • マス (0,0),(H,W)(0,0),(H,W) に魔物使いはおらず、マス (0,0),(H,W)(0,0),(H,W) のある方角を向いている魔物使いもいない。
  • マス (0,0)(0,0) から (H,W)(H,W) までの経路が存在する。

入力

入力はすべて整数である。

H W N
S_{1,1} S_{1,2} .. S_{1,W}
S_{2,1} S_{2,2} .. S_{2,W}
...
S_{H,1} S_{H,2} .. S_{H,W}

出力

moguさんが上下左右のマスへの移動を繰り返すことで町へ向かう際の、戦闘回数の最小値を1行に出力せよ。

サンプル

入力1
4 4 2
....
...<
.v..
....
出力1
1

例えば、次のように移動することで戦闘回数を 11 回にできます。戦闘回数を 00 回にすることはできないので、 11 を出力します。

***.
..*<
.v*.
..**
入力2
5 5 2
.....
...<.
.....
.>...
.....
出力2
0

次のように移動することで戦闘回数を 00 回にできます。

*****
...<*
*****
*>...
*****
入力3
5 5 4
.....
....<
....<
.....
..^^.
出力3
4

どのように移動しても戦闘回数は 44 回です。

入力4
5 5 2
.....
...v.
...^.
.....
.....
出力4
1

他の魔物使いの後ろに回ることによって魔物使いの視線をかいくぐることはできません。透視能力でもあるのでしょうか。

Submit


Go (1.21)