KRUSKAL算法

图的KRUSKAL算法是用以求解最小生成树的一种有效算法,每次从待选的边中选出最短的那一条边,加入到已有的树中,读者可以与PRIM算法相比较他们之间的异同,下面是代码,该代码利用堆排序以求能在较短时间内取出最短的那一条边。

package oj;

class Edge{
	int x1;
	int x2;
	int len;
	
	public Edge(int x1, int x2, int len) {
		this.x1 = x1;
		this.x2 = x2;
		this.len = len;
	}

	public int getX1() {
		return x1;
	}

	public void setX1(int x1) {
		this.x1 = x1;
	}

	public int getX2() {
		return x2;
	}

	public void setX2(int x2) {
		this.x2 = x2;
	}

	public int getLen() {
		return len;
	}

	public void setLen(int len) {
		this.len = len;
	}
	
}

public class KRUSKAL {
	
	public static void kruskal(Edge2[] edges,int[] point){
		preSortByLen(edges);
		int[] p=makeSet(point);
		int[] rank=initRank(point);
		Edge2[] T=new Edge2[point.length-1]; //最小生成树的边数是定点数-1
		int k=0;                           //该指针用来表示edges中的下一条边
		int t=0;
		while(t=i;j--){
				if(edges[j].getLen()


你可能感兴趣的:(数据结构,算法设计与分析)