提出したコード
解いた後の振り返りが大事だと思う。
2次元平面上で、スタート位置からゴール位置までの最短経路を求める。
ただし、平面上にはいくつかブロックがあり、そのセルは通れない。
さらに、一回の移動で、同一方向に1…Kの任意の個数のセルを進めることができる。
頂点は(y,x,dir)として、グラフを考えて、ダイクストラ法で最短経路を算出すればよい。
頂点(y,x,dir)からの遷移は以下の通り。
移動にかかるコストをK倍して考えるとよい。
- 方向を変えるときは、Kで切り上げ。
- cost(y,x,newdir)←((cost(y,x,dir)+K−1)/K)∗K
- 同方向に移動。dirは上下左右の4種類。dx、dyは方向ごとの差分。
- cost(y+dy,x+dx,dir)←cost(y,x,dir)+1
計算量はO(HWlog(HW))かな。
