最小生成树分析以及Python代码(networkx实现,画图)

目录

最小生成树的概念与算法

Kruskal 算法

Prim 算法

python代码(networkx)

函数定义

函数测试

画图

1. 如果画单个图可以这样画图:

 2. 高亮必须这样做:

3. 添加标签:

参考:


最小生成树的概念与算法

最小生成树(Minimum Spanning Tree, MST)是一个连通图的生成树,其边的总权重最小。常用的算法有 Kruskal 算法和 Prim 算法。

Kruskal 算法

主要思想:全局最小值

算法实现:全局寻找最短的边,如果这个边不会与之前选择的所有边组成回路,就可以作为最小生成树的一部分;反之,舍去。

(b)选择最小的边<v1, v3>

(c)(d)(e)依次选择了最小的边,没有问题。未产生回路。

(f)两个5中,如果选择了<v3,v4>就会产生回路v1->v3->v4->v1,因此不可以选择这一条边;然后发现第二个5刚好没有产生回路,得到完整的生成树

Prim 算法

主要思想:贪婪算法

step1:

从节点v1开始,选择距离连通集{v1}最小的节点v2,把对应的节点加入节点集{v1, v3},对应的边加入我们的联通集

step 2:

选择距离节点集最近的节点v6,加入对应的边<v3,v6>到连通集中,v6加入节点集和连通集

step 3~5:

同样的方法扩大连通集和节点集,直到所有的节点都进入节点集,于是最小生成树就产生了。


python代码(networkx)

函数定义

主要用到了的是nx.minimum_spanning_tree()和nx.tree.minimum_spanning_edges()

import matplotlib.pyplot as plt  
import networkx as nx  
  
# 创建带权边的列表  
weighted_edges = [(i, j, weight) for i, j, weight in [  
    (1, 2, 50), (1, 3, 60), (2, 4, 65), (2, 5, 40), (3, 4, 52),  
    (3, 7, 45), (4, 5, 50), (4, 6, 30), (4, 7, 42), (5, 6, 70)  
]]  
  
# 创建无向图并添加边
def create_and_add_edges():
    G =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值