# 生成树和最小生成树

> 原文： [https://www.programiz.com/dsa/spanning-tree-and-minimum-spanning-tree](https://www.programiz.com/dsa/spanning-tree-and-minimum-spanning-tree)

#### 在本教程中，您将通过示例和图形学习有关生成树和最小生成树的信息。

在学习生成树之前，我们需要了解两个图：无向图和连接图。

**无向图**是其中边缘没有指向任何方向的图（即，边缘是双向的）。

![Undirected Graph](img/7167ad2a18ac65a155f0105133975f95.png "Undirected Graph")

Undirected Graph



**连接图**是其中始终存在从顶点到任何其他顶点的路径的图。

![Connected Graph](img/0f73a6491cca9899d7b69678dba221a1.png "Connected Graph")

Connected Graph



* * *

## 生成树

生成树是无向图和连通图的子图，其中包括图的所有顶点，这些顶点的边数最少。 如果缺少顶点，则它不是生成树。

边缘可以分配权重，也可以不分配权重。

可以从完整图形创建的具有`n`顶点的生成树总数等于`n^(n-2)`。

如果我们有`n = 4`，则最大可能的生成树数等于`4^(4-2) = 16`。 因此，可以从具有 4 个顶点的完整图形中形成 16 个生成树。

* * *

## 生成树的示例

让我们通过以下示例了解生成树：

让原始图为：

![initial tree](img/772a4ca249aa31babda6d884ec8e82c9.png "normal graph")

Normal graph



可以从上图创建的一些可能的生成树是：

![spanning tree](img/ab61bf190f5a55214c40cd566c195a3c.png "example of spanning tree")

A spanning tree



![spanning tree](img/66a727c71c65f93b41b1dc99b1fe7120.png "example of spanning tree")

A spanning tree



![spanning tree](img/3f28d17bef03ac0f8ddb999e15ca2422.png "example of spanning tree")

A spanning tree



![spanning tree](img/4f01b3b97454c3118f952bf926fd84a8.png "example of spanning tree")

A spanning tree



![spanning tree](img/ebfbe4e1257234834c2fdc032b55df5f.png "example of spanning tree")

A spanning tree



![spanning tree](img/68e718922df50ff58a120da41bec693e.png "example of spanning tree")

A spanning tree



* * *

## 最小生成树

最小生成树是其中边缘的权重之和尽可能最小的生成树。

* * *

## 生成树的示例

让我们借助下面的示例了解上面的定义。

初始图形为：

![initial graph](img/02bf54af9a2d28b5ae2d333f44797be2.png "Initial weighted graph")

Weighted graph



上图可能的生成树是：

![minimum spanning tree (mst)](img/5af1a28d8353695f7d64f8ca1df45d11.png "minimum spanning tree (mst)")

Minimum spanning tree - 1



![minimum spanning tree (mst)](img/5f43ada94dc41360b338aa5ea53ebbb9.png "minimum spanning tree (mst)")

Minimum spanning tree - 2



![minimum spanning tree (mst)](img/c91fcbf6d0644c8f34a1365ab6b799da.png "minimum spanning tree (mst)")

Minimum spanning tree - 3



![minimum spanning tree (mst)](img/143ab3e6022bd6e93c97ddc18f850ae4.png "minimum spanning tree (mst)")

Minimum spanning tree - 4



上述生成树中的最小生成树为：

![minimum spanning tree (mst)](img/370b67d295c38209808d4e2894d7226d.png "minimum spanning tree (mst)")

Minimum spanning tree



使用以下算法可找到图中的最小生成树：

1.  [Prim 的算法](/dsa/prim-algorithm)
2.  [Kruskal 算法](/dsa/kruskal-algorithm)

* * *

## 生成树应用

*   计算机网络路由协议
*   聚类分析
*   民用网络规划

* * *

## 最小生成树应用

*   在地图中查找路径
*   设计诸如电信网络，供水网络和电网的网络。