算法
普里姆:O(n*2) ,与图中边数无关,该算法适合于稠密图.
1)设最小生成树T的V(T)和E(T)均为空。
(2)从顶点集V(G)中任取一顶点加到顶点集V(T)中。
(3)在与V(T)中各顶点相关联的所有边中,取一条权值最小的边(Vi,Vj)其中,Vi包含于V(T),Vj含于 V(T)。
(4)将边(Vi,Vj)加入到E(T)中,将顶点Vj到入到V(T)中.(5)若V(T)已满n个顶点,则算法终止,否则转步骤(3)。都是很典型很容易AC的
在这里挑一个最典型的题目贴上代码
#include <stdio.h>
#define MAXNUM 100000
int dis[101][101],low[101];
int main()
{
int n,i,j,min,k,sum;
while(scanf("%d",&n)!=EOF)
{
sum=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&dis[i][j]);
for(i=0;i<n;i++)
low[i]=dis[0][i];
low[0]=0;
for(i=1;i<n;i++)
{
min=MAXNUM;
j=k=1;
while(j<n)
{
if(low[j]&&low[j]<min)
{
min=low[j];
k=j;
}
j++;
}
sum+=low[k];
low[k]=0;
for(j=1;j<n;j++)
{
if(dis[k][j]<low[j])
low[j]=dis[k][j];
}
}
printf("%d\n",sum);
}
}