7K12 blog

猫でも分かる何か

AOJ 1160 島はいくつある?

f:id:tkr987:20200613001836p:plain

f:id:tkr987:20200613001948p:plain

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4416724

  • 互いに行き来できる=頂点の到達可能性=BFSかDFSで到達した頂点に印を付ける

f:id:tkr987:20200613004129p:plain

互いに行き来できるということは、グリッドをグラフに変換したときに閉路が存在するということなので強連結成分分解して求めることも出来るが、もっと単純にDFSやBFSで求めることが出来る。任意の座標をスタート地点としてBFS(またはDFS)して到達した頂点集合を島1個分とカウントすれば良い。制約から O(HW)の処理が可能なので、各グリッド全てをスタート地点としてBFSしてもTLEせず処理できる。BFSの具体的な実装としては、8方向で移動して移動済み頂点に印を付けていけば良い。