#include<queue>
#include<stdio.h>
#include<stdlib.h>
#define inf 1000000
int par[1000],dis[1000][1000],vis[1000];
int boot(int a)
{
int p;
if(par[a]==a)
return a;
return par[a]=boot(par[a]);
}
void pa(int a,int b)
{
int t,p;
t=boot(a);
p=boot(b);
par[t]=p;
return ;
}
int main()
{
int i,n,tot=1,a,count,b[1000],t,j,min,k;
a=0;
t=0;
b[t++]=a;
memset(vis,0,sizeof(vis));
vis[a]=1;
while(tot<n)
{
for(i=0;i<n;i++)
{
if(boot(a)!=boot(i))
{
pa(a,i);
count+=dis[i][a];
b[t++]=i;
vis[i]=1;
}
}
min=inf;
k=-1;
for(i=0;i<n;i++)
{
for(j=0;j<t;j++)
{
if(boot(i)!=boot(j)&&dis[i][j]<min)
{
min=dis[i][j];
k=i;
}
}
}
a=k;
}
}
最小生成树prim算法
最新推荐文章于 2019-09-24 16:14:43 发布