避圈法(求最小生成树)java实现

避圈法用于解决带有回路的带权图问题,寻找权重最小的最小生成树。本文通过Java代码展示避圈法的实现过程,包括邻接矩阵的初始化、线段的排序及不同情况的处理,旨在避免回路并连接所有节点。
摘要由CSDN通过智能技术生成

一、避圈法解决的问题



上图是一个带有回路的简单带权图。即两点间可能不只有一种到达方式,且每条边都带有权值。

在实际生产环境中,可将此图看作是城市间线缆的建造成本,或者拼车时送达各乘客的路线成本。

而避圈法是为了在这种图的基础上,得到一条连接所有点,且总权值最小的图。

在《图论》中称作该图权重最小的最小生成树,如下图:



二、代码展示


测试类:

package mintree;

import java.util.List;

/**
 * @author sean22
 * @date 2018/1/30/030.
 */
public class Test {
    public static void main(String[] args) {
        int X = Kruskal.X;
        int[][] matrix = {
                {X,X,X,3,4,X},
                {X,X,2,X,5,X},
                {X,2,X,X,X,4},
                {3,X,X,X,X,2},
                {4,5,X,X,X,3},
                {X,X,4,2,3,X}
        };
        List<Line> lines = Kruskal.getASCLines(matrix);
        Kruskal.loadPath(lines,matrix);
        Kruskal.print(matrix);
    }
}

主要功能类:

package mintree;


import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 * @author sean22
 * @date 2017/12/13/013.
 * 避圈法
 */
public class Kruskal {
    static int X = Integer.MAX_VALUE;

    public static List<Line> getASCLines(int[][] matrix){
        List<Line> lines = new LinkedList<>();
        for(int i=0;i<matrix.length;i++){
            for(int j=i;j<matrix[i].length;j++){
                if(matrix[i][j]!=X){
                    Line line = new Line(i,j,matrix[i][j]);
                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值