rustworkx.minimum_spanning_tree#
- minimum_spanning_tree(graph, weight_fn=None, default_weight=1.0)#
使用Kruskal算法寻找无向图的最小生成树或森林。
最小生成树(MST)是一个连通无向图的边子集,它连接所有顶点且无环,并具有最小的总边权重。
该函数计算构成无向图的最小生成树(MST)或森林的边。Kruskal算法通过对图中所有边按权重进行排序,然后逐一添加到MST中,同时确保不形成环。
>>> G = rx.PyGraph() >>> G.add_nodes_from(["A", "B", "C", "D"]) NodeIndices[0, 1, 2, 3] >>> G.add_edges_from([(0, 1, 10), (0, 2, 6), (0, 3, 5), (1, 3, 15), (2, 3, 4)]) EdgeIndices[0, 1, 2, 3, 4] >>> mst_G = rx.minimum_spanning_tree(G, weight_fn=lambda x: x) >>> mst_G.weighted_edge_list() WeightedEdgeList[(2, 3, 4), (0, 3, 5), (0, 1, 10)]
在这个例子中,边 (0, 2, 6) 不会成为最小生成树(MST)的一部分,因为在考虑该边时,由于权重更低,连接节点 0-3-2 的另外两条边已经是 MST 的组成部分。
如需获取仅作为边列表的结果,请查看
minimum_spanning_edges()。- Parameters:
graph (PyGraph) – 一个无向图
weight_fn –
一个可调用对象(函数、lambda表达式等),它接受一个边对象并返回一个
float。此函数用于提取各边的数值权重。例如:rx.minimum_spanning_tree(G, weight_fn=lambda x: 1)
将为所有边分配权重1,从而忽略实际权重。
rx.minimum_spanning_tree(G, weight_fn=float)
将直接将边对象转换为
float以确定其权重。default_weight (float) – 如果未指定
weight_fn,那么这个可选的浮点数值将被用作每条边的权重/成本。
- Returns:
一个最小生成树(如果图为非连通图,则为森林)。
- Return type:
注意
新图将保持相同的节点索引,但边索引可能有所不同。
- Raises:
ValueError – If a NaN value is found (or computed) as an edge weight.