Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
帮忙看看为什么不对呢??#include<iostream> using namespace std; int Prim(int money[27][27], int n) { /* lowcost[i]记录以i为终点的边的最小权值,当lowcost[i]=0时表示终点i加入生成树 */ int lowcost[27]; /* mst[i]记录对应lowcost[i]的起点,当mst[i]=0时表示起点i加入生成树 */ int mst[27]; int i, j, min, minid, sum = 0; /* 默认选择0号节点加入生成树,从1号节点开始初始化 */ for (i = 1; i <= n; i++) { /* 最短距离初始化为其他节点到0号节点的距离 */ lowcost[i] = money[0][i]; /* 标记所有节点的起点皆为默认的0号节点 */ mst[i] = 0; } /* 标记0号节点加入生成树 */ mst[0] = 0; /* n个节点至少需要n-1条边构成最小生成树 */ for (i = 1; i <= n; i++) { min = 101; minid = 0; /* 找满足条件的最小权值边的节点minid */ for (j = 1; j <= n; j++) { /* 边权值较小且不在生成树中 */ if (lowcost[j] < min && lowcost[j] != 0) { min = lowcost[j]; minid = j; } } /* 累加权值 */ sum += min; /* 标记节点minid加入生成树 */ lowcost[minid] = 0; /* 更新当前节点minid到其他节点的权值 */ for (j = 1; j <= n; j++) { /* 发现更小的权值 */ if (money[minid][j] < lowcost[j]) { /* 更新权值信息 */ lowcost[j] = money[minid][j]; /* 更新最小权值边的起点 */ mst[j] = minid; } } } /* 返回最小权值和 */ return sum; } int main() { int n,m,i,j,k; int money[27][27]; char a,b; while(1) { cin>>n; if(n==0) break; for(i=1;j<=n;j++) for(j=1;j<=n;j++) { money[i][j]=101; } for(i=1;i<=n-1;i++) { cin>>a>>m; for(j=1;j<=m;j++) cin>>b>>k; money[a-'A'+1][b-'A'+1]=money[b-'A'+1][a-'A'+1]=k; } cout<<Prim(money,n)<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator