|
# define max 50 struct a { int weight; int parent,lchild,rchild; }; struct b { char cd[max]; int start; }; main() { struct a ht[2*max]; struct b hcd[max],d; int i,j,k,n,c,s1,s2,m1,m2,f; printf("shu ru n: "); scanf("%d",&n); for(i=1;i<=n;i++) { printf("shu ru quan zhi :"); scanf("%d",&ht[i].weight); ht[i].parent=0; } for(;i<=2*n-1;i++) ht[i].parent=ht[i].lchild=ht[i].rchild=0; for(i=n+1;i<=2*n-1;i++) { m1=m2=30000; s1=s2=0; for(k=1;k<=i-1;k++) { if(ht[k].parent==0 && ht[k].weight<m1) { m2=m1; s2=s1; m1=ht[k].weight; s1=k; } else if(ht[k].parent==0 && ht[k].weight<m2) { m2=ht[k].weight; s2=k; } } ht[s1].parent=ht[s2].parent=i; ht[i].lchild=s1; ht[i].rchild=s2; ht[i].weight=ht[s1].weight+ht[s2].weight; } for(i=1;i<=n;i++) { d.start=n-1; c=i; f=ht[i].parent; while(f) { if(ht[f].lchild==c)d.cd[--d.start]='0'; else d.cd[--d.start]='1'; c=f; f=ht[f].parent; } hcd[i]=d; } printf("shu chu ha fu bian ma "); for(i=1;i<=n;i++) { printf("%d ",ht[i].weight); for(k=hcd[i].start;k<n-1;k++) printf("%c",hcd[i].cd[k]); printf(" "); } }
|