このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/249
#  [1] 授業単元: アルゴリズム 
#  [2] 問題文(含コード&リンク): 
#    
#  クラスカルのアルゴリズムを用いて最小木を求めるプログラムを作成せよ。 
#  読み込むグラフのデータ(graph.txt)は、 
#  頂点数 枝数 (1行目) 
#  始点 終点 枝の長さ (2〜枝の数だけ) 
#  という形式で行こうと思っています。 
#  http://codepad.org/BxDa8z6P 
#  10 20
#  0 1 15
#  0 2 6
#  0 3 3
#  0 4 4
#  1 4 4
#  1 5 7
#  1 6 20
#  2 3 2
#  2 7 1
#  3 4 1
#  3 7 2
#  4 5 8
#  4 7 5
#  4 8 3
#  4 9 6
#  5 6 1
#  5 9 3
#  6 9 20
#  7 8 3

クラスカルのアルゴリズムを用いて最小木を求める :-
        重み最小の枝を選択(_ノード1,_ノード2,_重み最小の枝),
        assertz(最小木(_ノード1,_ノード2,_重み最小の枝)),   
        閉路となる枝を刈取る(_ノード1,_ノード2),
        クラスカルのアルゴリズムを用いて最小木を求める.
クラスカルのアルゴリズムを用いて最小木を求める.

重み最小の枝を選択(_ノード1,_ノード2) :-
        findmin(_枝の重み,(
                    木(_,_,_枝の重み)),
                _重み最小の枝),
        木(_ノード1,_ノード2,_重み最小の枝),!.

閉路となる枝を刈取る(_ノード1,_ノード2) :-
        閉路(_ノード1,_ノード2,_ノード3),
        retract(木(_ノード1,_ノード3)).
閉路となる枝を刈取る(_ノード1,_ノード2) :-
        閉路となる枝を刈取る(_ノード2,_ノード1).

閉路(_ノード1,_ノード2,_ノード1,_ノード3) :-
        木(_ノード1,_ノード2),
        接続(_ノード2,_ノード3),
        木(_ノード3,_ノード1).

接続(_ノード1,_ノード2) :-
        木(_ノード1,_ノード2).
接続(_ノード1,_ノード2) :-
        木(_ノード1,_ノード3),
        接続(_ノード3,_ノード2).