Prim算法是求解最小生成树的常用方法,它的思想非常简单,讲所有的点集合V分为 已经放入最小生成树集合的S和未放入的V-S,每次在V-S中选择一个距离S最近的点放入到S中,直到所有的点都放入S。就是很简单的贪心策略,不过可以证明是全局最优,prim算法对于稠密图效果比较好,具体步骤可以看点击打开链接,讲解的很清楚。
对于上面的图,显然最小生成树的结果应该是{1,3,6,2,4,5}或者{1,3,6,4,2,5}
#include <iostream>
#include<vector>
using namespace std;
#define MAX_INT 999999
pair<int,int> GetShortestEdge(const vector<vector<int> >& Graph, const vector<bool>& isIncluded )//求当前在MST之外距离MST最近的点的id
{
int minID = -1;