import java.util.ArrayList;
import java.util.Scanner;
/*
样例输入
4 4
1 2 1
2 3 4
2 4 2
3 4 3
样例输出
6
样例输入
6 9
1 2 1
2 4 11
4 6 3
6 5 4
5 3 13
3 1 2
2 3 6
3 4 9
4 5 7
样例输出
19
*/
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//顶点数
int m=sc.nextInt();//边数
int [][]c=new int[n+1][n+1];
for (int i = 0; i < m; i++) {
int v1=sc.nextInt();
int v2=sc.nextInt();
int cost=sc.nextInt();
c[v1][v2]=c[v2][v1]=cost;
}
ArrayList<Integer> S=new ArrayList<Integer>();
ArrayList<Integer> V=new ArrayList<Integer>();
ArrayList<Integer> C=new ArrayList<Integer>();
S.add(1);
for (int i =2; i <=n; i++) {
V.add(i);
}
while(S.size()<n){
Integer j=0;
int lowCost=Integer.MAX_VALUE;
for (Integer v1 : S) {
for (Integer v2 : V) {
if(c[v1][v2]!=0 && c[v1][v2]<lowCost){
lowCost=c[v1][v2];
j=v2;
}
}
}
S.add(j);
V.remove(j);
C.add(lowCost);
}
int sum=0;
for (Integer cost : C) {
sum+=cost;
}
System.out.println(sum);
}
}
最小生成树之Prim算法-顶点的归并
猜你喜欢
转载自blog.csdn.net/qq_36442947/article/details/78723670
今日推荐
周排行