您的位置:首页 > 其它

POJ 1251 最小生成树prim算法

2011-12-21 00:35 676 查看
还是最小生成树prim算法,套用的浙大模板

#include <iostream>
#define MAXN 28
#define inf 10000
typedef int elem_t;
using namespace std;
elem_t prim(int n,elem_t mat[MAXN][MAXN],int* pre){
elem_t min[MAXN],ret=0;
int v[MAXN],i,j,k;
for (i=0;i<n;i++)
min[i]=inf,v[i]=0,pre[i]=-1;
for (min[j=0]=0;j<n;j++){
for (k=-1,i=0;i<n;i++)
if (!v[i]&&(k==-1||min[i]<min[k]))
k=i;
for (v[k]=1,ret+=min[k],i=0;i<n;i++)
if (!v[i]&&mat[k][i]<min[i])
min[i]=mat[pre[i]=k][i];
}
return ret;
}

int main(){
int n,m,i,j,result,q;
int pre[MAXN];
int distance[MAXN][MAXN];
char s,e;
while(cin>>n,n!=0){
for (i = 0;i < n;i++)
for (j = 0;j < n;j++)
{
distance[i][j] = inf;
}
for(i = 0;i < n-1;i++){
cin>>s>>m;
for(j = 0;j < m;j++){
cin>>e>>q;
distance[s -'A'][e -'A'] = distance[e -'A'][s -'A'] = q;
}
}
result  = prim(n,distance,pre);
cout << result<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: