图(带权无向图)最小生成树

本文介绍了如何在带权无向图中找到最小生成树。通过从一个顶点开始,利用优先队列寻找最小权值的边并逐步构建树的集合,直至所有顶点都被包含。过程中强调了无向有权图的特点,优先队列的作用,以及最小生成树与最短路径的区别。
摘要由CSDN通过智能技术生成

带权图的邻接矩阵中无连接的值为无限大
最小生成树的算法:从一个顶点出发找到其他顶点的所有的边,放入优先列队,找到权值最小的,把它和它所到达的顶点放入树的集合中。再以终点作为源点找到所有到其他顶点的边(不包括已放入树中的顶点),放入优先队列中,再从中取最小的把它
到达的顶点放入树的集合中(最小生成树)。再以终点作为源点找到所有到其他顶点的边(不包括已放入树中的顶点),放到优先队列中,再从中取最小的把它和它所到达的顶点放入树的集合中,反复这样操作到全部顶点都放入到树中为止。
除了图之外,我们还需要优先队列
注意是无向有权图的最小生成树
优先队列存放的是边这个对象。
最小生成树与最短路径是不同的东西
最小生成树返回的是一个顶点序列

带权图结构:边,顶点,优先队列,图
步骤:
初始化当前顶点索引为0
{标志当前顶点正在访问
寻找边插入队列(需要判断是否存在相同终点的边,有的话需要删除和替换)
获取队列中最小的边
输出
改变全局变量当前顶点的值
}循环

public class Edge {
   //
    public int srcVert;//存放源点的索引值
    public int destVert;//存放终点的索引值
    public int distance;//边的权值
    public Edge(int sv,int dv,int d) {
   //初始化边
        srcVert=sv;
        destVert=dv;
        distance=d;
        
    }

}
public class PriorityQ {
   //优先队列(优先队列中存放的是边对象)
    private final int SIZE=20;//队列的总长度(规定边最大的数量)
    private Edge[] queArray;//存放边对象的数组
    private int size;//当前边的数量
    public PriorityQ() {
        queArray=new Edge[SIZE]; //初始化数组
        size=0;//初始化边数量为0
    }
    //将边插入边数组中
    public void insert(Edge item) {
   //根据权值将边插入队列中
        int j;
        for(j=0;j<size;j++)//循环数组,找到插入边的位置
            if(item.distance>=queArray[j].distance)//如果找到要比姚插入的边权值大的边,就插入该边的后面
                break;//记录边的位置,即j
        //插入(移动和插入)
        for(int k=size-1;k>=j;k--)//位置后移动
            queArray[k+1]=queArray[k];
        queArray[j]=item;//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值