いわゆる権威チャートは、チャート内の各エッジが対応する1つまたはグループの値を持つことを意味します。通常、この値は単なる数字です
たとえば、輸送ネットワークでは、側面の重量は距離または輸送コストを表す場合があります(明らかに両方とも数字です)。ただし、端の重みは、文字列やより複雑なデータパケットなど、より多くのデータを収集するなど、他のものでもある可能性があります。
Kruskarアルゴリズムの中心的なアイデアは、加重接続グラフで、最小のエッジがエッジセットに常に見られることです。エッジが最小スパニングツリーを取得するための条件を満たしている場合、最小スパニングツリーが最終的に取得されるまで構築されます。
Kruskarアルゴリズムの実行手順:
ステップ1:加重接続グラフで、エッジの重みを並べ替えます。
ステップ2:このエッジを選択する必要があるかどうかを判断します(この時点で、図のエッジは重量が小さいから大きく分類されています)。判断の根拠は、エッジの2つの頂点が接続されているかどうかです。それらが接続されている場合は、次のものに進みます。それらが接続されていない場合は、それらを接続することを選択します。
ステップ3:グラフ内のすべての頂点が同じ接続コンポーネントになるまで2番目のステップをループします。つまり、最小スパニングツリーが取得されます。
許可グラフの実装については、次の例を参照してください。
グラフ:
パッケージkruskal; public classグラフ{final int max = 100;/** vertex node*/public class vexnode {int adjvex; int data;} vexnode [] vexnodes; int [] thevexs; // vertex set int [] [] [] edges = new int [max]; a、int [] vexs){thevexs = vexs; graph.thevexs.length; i ++){for(int j = 0; j <graph.thevexs.length; j ++){// path、output/if(graph.edges [j] == -1){system.out.printf( "%4s"、 "/");} {system.out.printf( "%4d"、graph.edges [i] [j]);}} system.out.println( "/n");}}}}}アルゴリズム:
パッケージkruskal; public class kruskal {public class edge {int start; int end; int weight;} public void sortedge(edge [] e、int e){edge temp; int j; for(int i = 0; i <e; i ++){temp = e [i]; j = i-1; e [j]; j - ;} e [j+1] = temp;}} public kruskal(グラフグラフ){int i、j、u1、v1、sn1、sn2、k; int [] vset = new int [100]; edge [] e = new edge [100]; k = 0; (j = 0; j <= i; j ++){e [k] = new Edge(); if(graph.edges [i] [j]> 0){e [k] .start = i; e [k] .end = j; e [k] .weight = graph.edges [i] [j]; k ++;}}}} sort(e、k); (i = 0; i <graph.thevexs.length; i ++){vset [i] = i;} k = 1; j = 0; while(k <graph.thevexs.length){u1 = e [j] .start; v1 = e [j] .end; sn1 = vset [u1]; sn2 = vset [vset [u1]; if(sn1!= sn2) {system.out.printf( "(%d、%d)、weight:%d"、u1、v1、e [j] .weight); system.out.println( "/n"); k ++; {vset [i] = sn1;}}} j ++;}}}テストクラス:
パッケージkruskal; public class test {public static void main(string [] args){int [] vexs = {0,1,2,3,4}; int [] [] a = {0,1,3,4,7}、{1,0,2、-1、-1}、{3,2,0,5,8}、{4、-1,5,0,6}、{7、-1,8,6,0}}; kruskal = new Kruskal(グラフ);}}要約します
上記は、この記事の全体的な内容が、Java言語のコード例に関する内容です。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、いつでもメッセージを残してください。編集者はあなたに答えるために最善を尽くします。