最小生成树
prim
int tree() 构造树,a[k]记录第k个节点可以加到当前构造的树的最小路径,每一步加一个最小的a[k]到树里
{
for(int i=0;i<n;i++)
{
a[i]=maxa;
}
a[0]=0;
for(int i=0;i<n;i++)
{
int MIN=maxa;
int sum=0;
for(int k=0;i<n;k++)
{
if(vis[k]==0&&a[k]<MIN)
{
MIN=a[k];
ii=k;
}
}
vis[ii]=1;
sum+=a[ii];
for(int k=0;k<n;k++)
{
if(load[ii][k]<a[k])
a[k]=load[ii][k];
}
}
}
Kruskal
int find(int i) 按路径大小由小到大排序,不能有环
{
return a[i]=i==a[i]?i;finf(a[i]);
}
int unin(int a,int b,int c)
{
if(find(a)!=find(b))
{
fa[find(a)]=find(b);
sum+=c;
}
}
struct network
{
int x;
int y;
int value;
}net[maxn*maxn];
bool cmp(network n1,network n2)
{
return n1.value<n2.value;
}
sort(net,net+k,cmp);