チャレンジ! アルゴリズムB 解答

こんなふうに計算します。ケーブルを、コストの小さい順につないでいきます。最初は、コスト11のケーブル。つないだところを赤く書きます。

challenge3b.png (36860 バイト)

次は、コスト12のケーブルがありますので、それを繋ぎます。

challenge3c.png (36936 バイト)

これで2つつながりました。つぎはコスト13のもの、これは3本あるので、それを全部つなぎましょう。

challenge3d.png (37304 バイト)

こうなりました。つぎはコスト14のケーブルをつなぎたいのですが、両方の家は、もうすでにつないでいるケーブルを使ってつながっています。ので、このケーブルは不要。よってつなぎません。同様に、2本あるコスト15のケーブルもつなぎません。次、16のケーブルは、まだつながっていない家をつなげますので、つなぎます。

challenge3e.png (37437 バイト)

これで、全ての家がつながりましたので、これで終了。コストは78。わかりました???   こんなふうに、コストの小さい方から順につないでいき、すでにつながっているところをつなぐものは無視する、とすると、必ず最小コストのつなぎ方が得られます。コストが同じ所は、どういう順番で選んでもかまいません。

ちなみに、この問題は「最小木問題」と呼ばれていて、この方法(アルゴリズム)は「クラスカルのアルゴリズム」と呼ばれています。

 

 宇野毅明のホームページへ          情報学研究所のホームページへ