概述
- 最小生成树是无向图中常见的一种问题,在无向图中连通且无回路的图被称为树;所有边的权值和最小的树被称为最小生成树。
- 最小生成树的算法有两个:prim算法和Kruskal算法,两个都是贪心的思想但是贪心的策略不同:prim对点进行贪心,Kruskal对边进行贪心。
- Kruskal的基本操作:
- 对边排序:
- 判断回路:
- 添加边并标记:
1、实现
可参照课本P62的简单实现!
如下图:
package 算法竞赛;
import java.util.Arrays;
import java.util.Scanner;
/**
* @project: ACM
* @description: 克鲁斯卡尔
* @author: dell
* @date: 2020/7/10 - 9:13
* @version: 1.0
* @website:
*/
public class kruskal {
/**
* 节点数量
*/
static int n;
/**
* 边数量
*/
static int m;
/**
* 存放边集
*/
static Edges[] e;
/**
* 存放父节点:并查集查询树
*/
static int[] tree;
// TODO: 2020/7/10 创建内部类,存放每条边的属性值
static class Edges implements Comparable<Edges>{
int begin;
int end;
int value;
boolean b=false; //标记该边是否添加至最小生成树