最小生成ツリーのPrimアルゴリズムとKruskalアルゴリズムjavaコード実装
2372 ワード
MiniSpanTreeの2つの静的関数は最小生成ツリーのPrimアルゴリズムとKruskalアルゴリズムを実現した.
上のコードには、次のようなエッジの補助クラスEdgeも必要です.
package datastucture;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author win7
*
*/
public class MiniSpanTree {
/**
* PRIM
* : N=(V,{E}) ,TE N 。 U={u0}(u0 V),
* TE={} , : u U,v V-U (u,v) E
* (u0,v0) TE, v0 U, U=V 。 TE n-1 , T=(V,{TE})
* N 。
* @param graph
* @param start
* @param n
*/
public static void PRIM(int [][] graph,int start,int n){
int [][] mins=new int [n][2];// U V-U ,mins[i][0] i
// -1 ,mins[i][1] ,
//mins[i][1]=0 U
for(int i=0;imins[j][1]){
minW=mins[j][1];
minV=j;
}
}
// System.out.println("minV="+minV);
mins[minV][1]=0;
System.out.println(" "+i+" =, ="+minW);
for(int j=0;j sets=new ArrayList();
for(int i=0;i
上のコードには、次のようなエッジの補助クラスEdgeも必要です.
package datastucture;
public class Edge implements Comparable{
public int i,j,w;
public Edge(int i,int j,int w){
this.i=i;
this.j=j;
this.w=w;
}
@Override
public int compareTo(Object o) {
Edge to=(Edge)o;
if(this.w>to.w) return 1;
else if(this.w==to.w) return 0;
else return -1;
}
@Override
public String toString() {
return "start="+i+"||end="+j+"||w="+w;
}
}