最小生成树

此示例展示了如何使用 igraph.Graph.spanning_tree() 从输入图中生成一个 最小生成树。如果你只需要一个普通的生成树,请查看 生成树

import random
import igraph as ig
import matplotlib.pyplot as plt

我们首先生成一个带有1到20之间随机整数权重的网格图:

random.seed(0)
g = ig.Graph.Lattice([5, 5], circular=False)
g.es["weight"] = [random.randint(1, 20) for _ in g.es]

然后我们可以使用 igraph.Graph.spanning_tree() 计算最小生成树,确保传入随机生成的权重。

mst_edges = g.spanning_tree(weights=g.es["weight"], return_tree=False)

我们可以打印出最小边权重和

print("Minimum edge weight sum:", sum(g.es[mst_edges]["weight"]))

# Minimum edge weight sum: 136
Minimum edge weight sum: 201

最后,我们可以绘制图形,突出显示属于最小生成树的边。

g.es["color"] = "lightgray"
g.es[mst_edges]["color"] = "midnightblue"
g.es["width"] = 1.0
g.es[mst_edges]["width"] = 3.0

fig, ax = plt.subplots()
ig.plot(
    g,
    target=ax,
    layout="grid",
    vertex_color="lightblue",
    edge_width=g.es["width"],
    edge_label=g.es["weight"],
    edge_background="white",
)
plt.show()
minimum spanning trees

脚本的总运行时间: (0 分钟 0.823 秒)

Gallery generated by Sphinx-Gallery