最小生成树-Kruskal_Prim算法实现(Javascript实现)

最小生成树

说明

这里不会对原理进行详细的分析讲解,只说构建的过程
这里假设所有的图的所有节点都是连通了,不会是非
最小生成树的构建过程最关键的就是对于成环的判断

使用的图

在这里插入图片描述

Kruskal算法

边集合数据结构

//边集合
edges = []
//边集合中元素
function node(start, end, weight) {
   
        this.start = start;
        this.end = end;
        this.weight = weight;
    }

伪代码

//edges.sort();
边集合排序
选择权重最小的边
while(选中的边数 < 点数){
   
	if(是安全边){
   
		选中这个边
		开始点和结束点加入已选中中
	}
}
//安全边检测
//原理:对于每个点来说,加入集合就是集合中一个点指向这个点,如果这个点本来就是集合中的,那么集合就会成环,所以安全边就是要让这个边的两个点不在一个集合中
//设置一个集合数组记录已有的集合
if(开始点和结束点都未使用){
   
	两个一起形成新集合
}else if(开始点和结束点有一个是集合中的){
   
	新加入的点进入大集合中
}else if(开始点和结束点都是在集合中但是不在一个集合){
   
	让结束点集合合并到开始点中
}

边的选择和集合生成过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里的图用的是一个公众号的图,不用作商业用途,如有冒犯,万分抱歉

实现代码
数据

//这里是九个点
//edges是边集,这里有15条边
        
var NumNodes = 9;
var NumEdges = 15;
var start = [4, 2, 0, 0, 1, 3, 1, 5, 1, 6, 3, 3, 2, 3, 4];
var end =   [7, 8, 1, 5, 8, 7, 6, 6, 2, 7, 4, 8
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值