Kruskal 算法

Kruskal:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class Kruskal {
	public static List<int[]> kruskal(List<int[]> graph,int n){
		List<int[]> allPath=new ArrayList<int[]>();
		int[] uf=new int[n];
		for(int i=0;i<uf.length;i++) uf[i]=i;
		Collections.sort(graph,new Comparator<int[]>() {
			@Override
			public int compare(int[] o1, int[] o2) {
				return o1[2]-o2[2];
			}
		});
		for(int[] temp:graph){
			int i=temp[0];int j=temp[1];
			while(i!=uf[i]) i=uf[i];
			while(j!=uf[j]) j=uf[j];
			if(i==j) continue;
			allPath.add(temp);
			uf[j]=i;
		}
		return allPath;
	}
	public static void main(String[] args) {
		int m=6;
		int[][] input={  
				{1,2,6},  
				{1,3,1},  
				{1,4,5},  
				{2,3,5},  
				{2,5,3},  
				{3,4,5},  
				{3,5,6},
				{3,6,4},  
				{4,6,2},  
				{5,6,6}  };
		List<int[]> graph=new ArrayList<int[]>();
		for(int i=0;i<input.length;i++){
			graph.add(new int[]{input[i][0]-1,input[i][1]-1,input[i][2]});
		}
		List<int[]> re=kruskal(graph, m);
		for(int i=0;i<re.size();i++){
			int[] temp=re.get(i);
			System.out.println(temp[0]+" ---> "+temp[1]+":"+temp[2]);
		}
	}
//	1 ---> 4:3
//	2 ---> 1:5
//	0 ---> 2:1
//	5 ---> 2:4
//	3 ---> 5:2
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值