連結グラフから連結性を保ったままノードを取り除く

· 361 words · 1 minute read

連結グラフからノードをひとつずつ取り除くことを考える。このとき、連結性を保ったまま、ノード数が1になるまでグラフを小さくできる。

ノードを取り除く順番次第で、グラフが連結ではなくなってしまう。例えば上の図で最初にEを取り除くと、グラフが連結ではなくなる。では連結性を保ちたいとき、どのような順番でノードを取り除けばよいか?

グラフのあるノードからBFSもしくはDFSをすると木ができる。この木の葉をひとつずつ摘んでいくと、最終的に根が残る。木の葉を摘むときに、元のグラフの対応するノードを削除していくと、連結性を保ったままノード数を減らし続けることができる。以下は元のグラフをAからDFSしたときにできる木を示している。

D,F,B,E,Cの順に葉を摘むと、元のグラフが1枚目の画像のように遷移する。

(参考) LeetCode 947. Most Stones Removed with Same Row or Column