这个是有关普利姆的算法,从一个点出发,找出与这个点相连的所有点的对应的权值最小的那个,然后再把这个点从集合中划掉。
模板如下:
#include<iostream>
#include<cstring>
#define INF 0xfffff
#define max 2005
using namespace std;
int map[max][max],def[max];
void prim (int n,int k){
int i,j,ans=0,minedge=INF,mincode;
for(i=1; i<=n; i++)
if(i!=k)
def[i] = map[k][i];
def[k] = 0;
for(i=1; i<n; i++) {
minedef = INF;
for(j=1; j<=n;j++) {
if(def[j] && def[j] <minedge) {
minedge = def[j];
mincode = j;
}
}
ans +=minedge;
def[mincode] = 0;
for(j=1; j<=n; j++) {
if(map[mincode][j] <def[j])
def[j] = map[mincode][j];
}
}
}