您的位置:首页 > 其它

poj 1251 Jungle Roads 最小生成树

2013-04-14 19:37 489 查看
一个裸的最小生成树

没有太多可以讲的了

就是注意一下输入

#include <iostream>

#include<stdio.h>

#include<string.h>

using namespace std;

const int maxn=1001;

const int inf=1<<30;

int e[maxn][maxn];

int n;

int min(int key[],int txt[])

{

int
ret=inf,tmp;

for(int
i=1;i<=n;i++)

if(txt[i]==0&&key[i]<ret)

{

tmp=i;

ret=key[i];

}

return(tmp);

}

int prim(int n)

{

int
ans=0;

int
key[maxn],txt[maxn];

memset(txt,0,sizeof(txt));

for(int
i=1;i<=n;i++)

{

if(e[1][i]!=0)

key[i]=e[1][i];

else

key[i]=inf;

}

txt[1]=1;

for(int
i=2;i<=n;i++)

{

int u=min(key,txt);

ans+=key[u];

txt[u]=1;

for(int j=1;j<=n;j++)

if(e[u][j])

if(e[u][j]<key[j])

key[j]=e[u][j];

}

return(ans);

}

int main()

{

while(1)

{

memset(e,0,sizeof(e));

scanf("%d",&n); if(n==0) break;

char c[10],d[10];

int tmp,m,b;

for(int i=1;i<n;i++)

{

scanf("%s",c);

tmp=c[0]-'A'+1;

scanf("%d",&m);

for(int j=1;j<=m;j++)

{

scanf("%s %d",d,&b);

e[tmp][d[0]-'A'+1]=b;

e[d[0]-'A'+1][tmp]=b;

}

}

int ans=prim(n);

printf("%d\n",ans);

}

return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: