图论算法(二)最小生成树

图论算法之最小生成树

最小生成树

定义

一幅加权图的最小生成树(MST)是它的一棵权值(树中所有边的权值之和)最小的生成树。

原理

图的一种切分是将图中所有顶点分为两个非空且不重叠的两个集合。横切边是一条连接两个属于不同集合的顶点的边。(下图中的红边即为横切边)

(切分定理):在一幅加权图中,给定任意的切分,它的横切边中的权重最小者必然属于图中的最小生成树。

由此可知我们只需要使用切分定理找到最小生成树的一条边,不断重复直到找到最小生成树的所有边。

数据类型基本实现

带权重的边的数据类型
package chapter4;

/**
 * 带权重的边的数据类型
 */
public class Edge implements Comparable<Edge> {
    private final int v;//顶点之一
    private final int w;//另外一个顶点
    private final double weight;//边的权重

    Edge(int v, int w, double weight){
        this.v=v;
        this.w=w;
        this.weight=weight;
    }

    public double weight(){
        return weight;
    }

    /** 查询边的一个顶点 **/
    public int either(){
        return v;
    }
    /** 查询边的另外一个顶点 **/
    public int other(int vertex) {
        if (vertex == v) {
            return w;
        } else if (vertex == w) {
            return v;
        } else {
            throw new RuntimeException("Inconsistent edge");
        }
    }
    
    @Override
    public int compareTo(Edge that) {
     
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值