您的位置:首页 > 其它

Kru&&Prim模板

2010-11-13 20:57 183 查看
#include<stdio.h>
#include<string.h>
#define maxcost 99999
int g[100][100];
int n,m;
int pre[100],dist[100],vis[100];
void prim(int v)
{
int i,j,dis,min,k,ans=0;
memset(vis,true,sizeof(vis));
for(i=1;i<=n;i++)
{
pre[i]=1;
dist[i]=g[v][i];
}
vis[1]=false;dist[1]=0;
for(i=1;i<=n;i++)
{
min=maxcost;k=v;
for(j=1;j<=n;j++)
{
if(dist[j]<min&&vis[j])
{min=dist[j];k=j;}
}
if(min!=maxcost)
{
ans+=min;
}
vis[k]=false;
for(j=1;j<=n;j++)
{
if(vis[j]&&dist[j]>g[k][j]&&g[k][j]!=maxcost)
{
dist[j]=g[k][j];
pre[j]=k;
}
}
}
printf("%d/n",ans);
}
int main()
{
int a,b,c,i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
g[i][j]=maxcost;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
g[a][b]=c;
g[b][a]=c;
}
prim(1);
return 0;
}
#include<stdio.h>
#include<string.h>
#define maxcost 99999
int n,m,index,pre[100],ans;
struct node
{
int v,to,len;
}edge[100];
void add(int a,int b,int c)
{
edge[index].v =a;
edge[index].to =b;
edge[index].len =c;
index++;
}
void uion(int a,int b)
{
if(a<b)
pre[b]=a;
else pre[a]=b;
}
void sort()
{
int i,j,k;
struct node temp;
for(i=0;i<index-1;i++)
{
k=i;
for(j=i+1;j<index;j++)
{
if(edge[k].len >edge[j].len )
k=j;
}
temp=edge[i];edge[i]=edge[k];edge[k]=temp;
}
}
int find(int i)
{
while(pre[i]!=i)
i=pre[i];
return i;
}
void kru()
{
int i,j,k;
int tt=0;
ans=0;
for(i=1;i<=n;i++)
pre[i]=i;
for(i=0;i<index;i++)
{
if(tt==n-1)
return ;
int f1=find(edge[i].v);
int f2=find(edge[i].to );
if(f1!=f2)
{
ans+=edge[i].len ;
uion(f1,f2);
}
}
}
int main()
{
int a,b,c,i,j;
scanf("%d%d",&n,&m);
index=0;
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
sort();
kru();
printf("%d/n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: