ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

AOJ 1150 - 崖登り

問題
提出コード

解法

面倒くさそうに見えますがダイクストラをします。
マス目が少ないので、左のマス目、右のマス目、どちらの足を動かす番か、という情報を全て持ちながらダイクストラができます。
足を動かす際は、動かさない方の足を基準にして、距離と方向を決めます。少し広めに探索して、条件(マンハッタン距離が3以下、等)を満たさなければそこは探索をしない、というようにやってあげると、簡単な2重ループで書けるので楽でした。
また、初期地点は、右足と左足どちらも同じSのマスにいる、と考えると楽になります。
あとは、丁寧に遷移しながらダイクストラをして、Tにつくまでの最短時間を求めれば終わりです。

感想

今回は、xyが問題文と自分のコードで逆になっていたため、それが原因となるバグを埋め込み、そして初期状態は、両足がそれぞれ別のSのマスにいなければならないと誤読しました。
遷移が多くなるだけで、頭の中が整理できなくなってしまうので、もう少し綺麗なコードにしたいと思います。