prime算法
基本思想
- 任取一个点加入生成树
- 从一个顶点在生成树中另一个点不在的边中选出权重最小的边并将另一个顶点加入生成树
- 重复步骤2直到所有点都加入了生成树,此时的生成树即为最小生成树
图解
伪代码
int prime(int shoujiedian)//首个节点
{
1.标记数组,全部为未访问
2.
for(i=0;i<N;i++)
将与i点边相连 的边存入数组dist[i];
3.遍历每个节点
找到未访问的点中,距离当前最小生成树距离最小的点
不断更新与点cur的相连点的最短距离
标记距离最短的刚刚被拿走的那个节点,已经被访问过
已经进入最小树的点的可及范围,与刚进入最小树的点相比较,比之前点可到达某点的距离较小,更新当前最小生成树的可及范围的最小值
执行更新,如果点距离当前点的距离更近,就更新dist
返回最小生成树的总路径值
}
源代码
//prime算法
#include <bits/stdc++.h>
#define INF 10000
using namespace std;
const int N = 7;
bool visit[N];
int dist[N] = {
0, };
int G[N][N] = {
{
INF,9,2,INF,INF,INF,INF},
{
9,INF,4,7,INF,INF,1},
{
2,4,INF,INF,5,INF,INF},
{
INF,7,INF,INF,3,INF,6},
{
INF,INF,5,3,INF,8,10},
{
INF,INF,INF,INF,8,INF,7},
{
INF,1,INF,6,10