建立无向有权图的邻接矩阵并用普里姆算法求最小生成树
时间: 2023-09-06 18:11:14 浏览: 89
首先,我们需要了解无向有权图的邻接矩阵是什么。邻接矩阵是用一个二维数组来表示图的方法,其中数组中的每个元素表示该位置上的两个顶点是否有边相连,如果相连则为边权,否则为无穷大。
假设我们有一个这样的无向有权图,其中有5个节点和7条边:
```
2
1------2
|\ /|
| \ / |
4| \/ |3
| /\ |
| / \ |
|/ \|
4------5
5
```
我们可以用邻接矩阵来表示这个图,其中数组a[i][j]表示从节点i到节点j的边权,如果没有边相连则为无穷大:
```
1 2 3 4 5
1 0 2 inf 4 inf
2 2 0 3 5 1
3 inf 3 0 inf inf
4 4 5 inf 0 1
5 inf 1 inf 1 0
```
接下来,我们可以用普里姆算法来求最小生成树。普里姆算法是一种贪心算法,它从一个任意的节点开始,不断寻找与该节点直接相连的最小权值边所连接的节点,并将其加入生成树中,直到所有节点都加入为止。
我们在这里选择节点1作为起点,然后不断寻找与它相连的最小权值边所连接的节点。具体步骤如下:
1. 将节点1加入生成树中,并将其标记为已访问。
2. 找到与节点1相连的所有边,并选择其中权值最小的边(即与节点2相连的边),将节点2加入生成树中,并将其标记为已访问。
3. 找到与生成树中已有节点相连的所有边,并选择其中权值最小的边(即与节点5相连的边),将节点5加入生成树中,并将其标记为已访问。
4. 找到与生成树中已有节点相连的所有边,并选择其中权值最小的边(即与节点4相连的边),将节点4加入生成树中,并将其标记为已访问。
5. 找到与生成树中已有节点相连的所有边,并选择其中权值最小的边(即与节点2相连的边),但是节点2已经被标记为已访问,因此我们跳过这条边。
6. 找到与生成树中已有节点相连的所有边,并选择其中权值最小的边(即与节点5相连的边),但是节点5已经被标记为已访问,因此我们跳过这条边。
7. 所有节点都已经被加入生成树中,算法结束。
最终得到的最小生成树是:
```
2
1------2
|
4------5
```
其中所有边的权值之和为2+1+1=4。
阅读全文