この記事で使うアルゴリズム
ワーシャルフロイド法
はじめに
カテゴリー競プロ初中級者100問では、Qiita
にて@e869120
さんがレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】としてまとめられている100問をPython
で解いています。
全問題の一覧はこちらです
問題
https://atcoder.jp/contests/abc079/tasks/abc079_d
この問題はワーシャルフロイド法を用いて解くことができます。
解説
ある数字を1
に変えるために他の数字を経由することで、直接書き換えるよりコストを節約できるケースがあります。
つまり、この問題は魔力をコストとした最短経路問題
と言えます。
一旦、最短経路を求めてしまえば、あとは壁に書かれている数字に対し1
への変換コストを求めて足していけば良いです。
解法としては
- ダイクストラ法をN回適用する
- ワーシャルフロイド法
などが考えられます。どちらも計算量はO(N^3)
です。
今回の問題は隣接行列が対称行列となっていない点に注意が必要ですが、これらのアルゴリズムは問題なく適用できます。
コード
1 | H, W = map(int, input().split()) |
記事情報
- 投稿日:2020年4月21日
- 最終更新日:2020年5月8日