最小生成树的prime算法是以点为核心来进行计算.
原理:从一个点开始遍历它到其他所有点的距离,无法直接到达的距离为INF,记录为mindis数组
如:一共有四个点ABCD 五条边
A——B 2; A——C 1; A——D 3; B——C 4; C——D 2;
选取A为第一个点,那么mindis数组中的值为0,2,1,3;并将A标记为已经访问过的点;
然后从未访问过的点中找最小的值加入生成树,即此时mindis数组的最小值为1(即A——C的距离最短),为C点,将C加入生成树(即标记C已经访问),并将sum加上权值1;
现在生成树中有两个点A和C,更新mindis数组,即看C到各个点的值与原来mindis数组中的值哪一个小,此时C——D的权值为2,mindis中到D的权值为3,所以更新mindis,更新后为0,2,1,2;
重复上述步骤直到访问所有点
下面是代码
#include <iostream>
#include<cstring>
using namespace std;
int ma[5005][5005];
int mindis[5005];
bool vis[5005];
const int INF=0x3f3f3f;
int main