标签:
链接:
http://poj.org/problem?id=1251
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 110; const int INF = 0xfffffff; int n, J[N][N], dist[N], vis[N]; int Prim() { int i, j, ans=0; dist[1]=0; memset(vis, 0, sizeof(vis)); vis[1]=1; for(i=1; i<=n; i++) dist[i]=J[1][i]; for(i=1; i<n; i++) { int index=1, MIN=INF; for(j=1; j<=n; j++) { if(!vis[j] && dist[j]<MIN) { index=j; MIN=dist[j]; } } vis[index]=1; ans += MIN; for(j=1; j<=n; j++) { if(!vis[j] && dist[j]>J[index][j]) dist[j]=J[index][j]; } } return ans; } int main () { while(scanf("%d", &n), n) { int i, j, b, t, m; char ch; for(i=1; i<=n; i++) for(j=1; j<=i; j++) J[i][j]=J[j][i]=INF; for(i=1; i<n; i++) { cin>>ch>>m; for(j=0; j<m; j++) { cin>>ch>>t; b=ch-‘A‘+1; J[i][b]=J[b][i]=t; } } int ans=Prim(); printf("%d\n", ans); } return 0; }
(最小生成树) Jungle Roads -- POJ -- 1251
标签:
原文地址:http://www.cnblogs.com/YY56/p/4735011.html