FindSpanningTree[{v1,v2,…,vn}]
求可最小化 vi 之间总距离的生成树.
求可最小化顶点之间总距离的图 g 的生成树.
FindSpanningTree[{g,v},…]
找到 g 包括顶点 v 的连通分量的生成树.
FindSpanningTree[{vw,…},…]
使用规则 vw 指定图 g.
FindSpanningTree
FindSpanningTree[{v1,v2,…,vn}]
求可最小化 vi 之间总距离的生成树.
求可最小化顶点之间总距离的图 g 的生成树.
FindSpanningTree[{g,v},…]
找到 g 包括顶点 v 的连通分量的生成树.
FindSpanningTree[{vw,…},…]
使用规则 vw 指定图 g.
更多信息和选项
- FindSpanningTree 也被称为最小生成树和最小生成森林.
- 通常用于求没有环的最佳连接.
- FindSpanningTree[{v1,…,vn}] 给出可最小化 vi 之间总距离的顶点为 v1,…,vn 的完全图的生成树.
- 连通图 g 的生成树是 g 的一个子图,是连接 g 的所有顶点的一颗树.
- 对于加权图,FindSpanningTree 给出边权和最小的生成树.
- 对于不连通图,FindSpanningTree 给出一个子图,它由每个连通分量的生成树组成.
- FindSpanningTree 与 Graph 的选项相同,不同之处及更多选项如下所示: [所有选项的列表]
-
DistanceFunction Automatic 应用于成对对象的函数 Method Automatic 使用的方法 - DistanceFunction 的 Automatic 设置包括以下选择:
-
EuclideanDistance 数字列表的个数 EditDistance 字符串 GeoDistance 地理位置 - 对于图 g,距离为 GraphDistance.
- Method 的可能设置包括:
-
"Kruskal" 支持稀疏无向图 "MinimumCostArborescence" 支持有向图 "Prim" 支持稠密无向图 - 使用默认设置 Automatic 时,将根据给定的图在这些方法之间切换.
所有选项的列表
范例
打开所有单元 关闭所有单元基本范例 (1)
范围 (10)
FindSpanningTree 适用于点的列表:
FindSpanningTree[RandomReal[1, {20, 2}]]FindSpanningTree[{"cat", "dog", "do", "cap", "dock"}]FindSpanningTree[{GeoPosition[{41, 20}], GeoPosition[{5, 20}], GeoPosition[{49, 32}], GeoPosition[{53, 28}], GeoPosition[{47, 29}]}]FindSpanningTree 适用于无向图:
FindSpanningTree[[image]]FindSpanningTree[[image]]FindSpanningTree[[image]]FindSpanningTree[[image]]FindSpanningTree[{[image], 4}]FindSpanningTree[{1 -> 3, 2 -> 1, 3 -> 6, 4 -> 6, 1 -> 5, 5 -> 4, 6 -> 1}]FindSpanningTree 适用于大型图:
g = GridGraph[{10, 10, 10, 10, 10}];VertexCount[FindSpanningTree[g]]//Timing推广和延伸 (1)
选项 (5)
EdgeWeight (1)
默认情况下,如果可用,边的权值取其 EdgeWeight 注释,否则为1:
FindSpanningTree[[image]]使用 EdgeWeight->weights 设置边的权值:
FindSpanningTree[[image], EdgeWeight -> {3, 4, 5, 1, 2, 3, 7}]Method (4)
{WheelGraph[7], WheelGraph[7, EdgeWeight -> RandomReal[1, 12]]}Table[HighlightGraph[g, FindSpanningTree[g]], {g, %}]g = [image];HighlightGraph[g, FindSpanningTree[g, Method -> "Prim"]]g = [image];HighlightGraph[g, FindSpanningTree[g, Method -> "Kruskal"]]"MinimumCostArborescence" 可用于有向图:
g = [image];HighlightGraph[g, FindSpanningTree[g, Method -> "MinimumCostArborescence"]]FindShortestTour应用 (7)
一个公司正在为一些芝加哥郊区筹划光纤网络. 它仅具有将它们的光纤沿某些走廊的优先通行权. 这些走廊中的某一些可能更昂贵. 找到连接走廊的子图,使得与各郊区连接总成本最低:
g = [image];fibernetwork = FindSpanningTree[g];HighlightGraph[g, fibernetwork, GraphHighlightStyle -> "Thick"]电话公司的任务是为一个有 10 户人家的村庄提供电话线. 每个节点都是一个房子,每个房子都有一个位置. 找到一种使用最少电话线连接所有房屋的方法:
locations = RandomReal[1, {10, 2}];vname = {"H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "H10"};phonenetwork = FindSpanningTree[locations, VertexLabels -> Table[i -> vname[[i]], {i, 10}]]Total[AnnotationValue[{phonenetwork, #}, EdgeWeight]& /@ EdgeList[phonenetwork]]一个二维数组,各行具有相似的元素,仅在几个地方有区别.
表示行
和
的不同元素的数目. 该数组可以如此存储:表示一个整行,而其他各行用不同于另一行的元素表示来存储. 我们可以将各矩阵的行作为顶点进行模拟,其中用边连接每个顶点,用
的权值表示相异元素的个数. 使用最小权值生成树找到一个有效的存储方案:
g = CompleteGraph[10, EdgeWeight -> RandomInteger[5, 45]];FindSpanningTree[{g, 1}]完全存储第1行,对于其他行,仅存储位置和不同于其父级的元素:
Annotate[%, VertexLabels -> "Name"]g = [image];distances = With[{coords = VertexCoordinates /. Options[g, VertexCoordinates]}, Map[EuclideanDistance[coords[[VertexIndex[g, First[#]]]], coords[[VertexIndex[g, Last[#]]]]]&, EdgeList[g]]];FindSpanningTree[g, EdgeWeight -> distances];HighlightGraph[g, %, GraphHighlightStyle -> "DehighlightGray"]g = GridGraph[{20, 30}, EdgeWeight -> RandomReal[10, 1150]];tree = FindSpanningTree[{g, 1}];style = {Background -> GrayLevel[0], EdgeStyle -> {Directive[GrayLevel[1], Thickness[0.017], Opacity[1], CapForm["Square"]]}, VertexShapeFunction -> "Square", VertexSize -> {.2, .2}, VertexStyle -> Directive[White, EdgeForm[]]};Graph[tree, VertexCoordinates -> GraphEmbedding[g], style]completeGraph[n_, dist_] := CompleteGraph[n, EdgeWeight -> RandomVariate[dist, n * (n - 1) / 2]]Table[completeGraph[n, UniformDistribution[]], {n, 4, 7}]size[g_] := With[{edges = EdgeList[FindSpanningTree[{g, 1}]]}, Total[AnnotationValue[{g, #}, EdgeWeight]& /@ edges]]Table[size[completeGraph[n, UniformDistribution[]]], {n, 4, 7}]Mean[Table[size[completeGraph[n, UniformDistribution[]]], {n, 100, 200}]]Zeta[3.]europe = ["europe capital"];FindSpanningTree[europe]GeoGraphPlot[%]属性和关系 (2)
g = [image];FindSpanningTree[g]TreeGraphQ[%]BreadthFirstScan 可用于找到图的生成树:
g = GraphData["DodecahedralGraph"];BreadthFirstScan[g, 1, {"PrevisitVertex" -> (#&)}]HighlightGraph[g, TreeGraph[VertexList[g], %]]使用 DepthFirstScan 找到生成树:
DepthFirstScan[g, 1, {"PrevisitVertex" -> (#&)}]HighlightGraph[g, TreeGraph[VertexList[g], %]]可能存在的问题 (1)
巧妙范例 (1)
dist = TransformedDistribution[Normalize[{x, y, z}], {x, y, z}ProductDistribution[{NormalDistribution[], 3}]];g = RandomGraph[SpatialGraphDistribution[200, 0.3, dist]];HighlightGraph[g, FindSpanningTree[g]]文本
Wolfram Research (2014),FindSpanningTree,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FindSpanningTree.html (更新于 2021 年).
CMS
Wolfram 语言. 2014. "FindSpanningTree." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2021. https://reference.wolfram.com/language/ref/FindSpanningTree.html.
APA
Wolfram 语言. (2014). FindSpanningTree. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/FindSpanningTree.html 年
BibTeX
@misc{reference.wolfram_2026_findspanningtree, author="Wolfram Research", title="{FindSpanningTree}", year="2021", howpublished="\url{https://reference.wolfram.com/language/ref/FindSpanningTree.html}", note=[Accessed: 09-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_findspanningtree, organization={Wolfram Research}, title={FindSpanningTree}, year={2021}, url={https://reference.wolfram.com/language/ref/FindSpanningTree.html}, note=[Accessed: 09-September-2026]}