还是最小生成树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; }POJ 1251 最小生成树prim算法
最新推荐文章于 2018-08-13 15:28:34 发布