| ||||||||||
| 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 | |||||||||
Re:用一个数组代替哈夫曼树,哪里错误,测试数据都正确啊,,,,,,求大神In Reply To:用一个数组代替哈夫曼树,哪里错误,测试数据都正确啊,,,,,,求大神 Posted by:18236887539 at 2013-08-01 12:07:44 >
> #include <string.h>
> #include <stdio.h>
> #include <iostream>
> #include <stdlib.h>
> #include <algorithm>
> using namespace std;
>
> int a[40002];
> bool visit[40002];
>
> void Haffman(int n)
> {
> /*
> 6
> 3 6 1 4 2 5
> 3
> 8 5 8
> 7
> 2 3 8 5 8 3 3
> 1
> 355
> */
> memset(visit,0,sizeof(visit));
> int num = n;
> int i,j,min1,min2,index1,index2;
>
> for(i=0;i<n-1;i++)//创建n-1个新结点
> {
> min1 = min2 = 999999;
> for(j=0;j<num;j++)
> {
> if(!visit[j])
> {
> if(a[j]<min1)
> {
> min2 = min1;
> index2 = index1;
> min1 = a[j];
> index1 = j;
> }
> else if(a[j]<min2)
> {
> index2 = j;
> min2 = a[j];
> }
> }
> }
> visit[index1] = visit[index2] = 1;
> // printf("index1=%d,min1=%d,index2=%d,min2=%d\n",index1,min1,index2,min2);//找到最小的两个
> a[num] = min1 + min2;
> num++;//创建新结点
> }
>
> long long sum =0;
> for(i=n;i<num;i++)
> sum += a[i];
> printf("%lld\n",sum);
> }
>
> int main()
> {
> int i,n;
> while(scanf("%d",&n)!=EOF)
> {
>
> for(i=0;i<n;i++)
> scanf("%d",&a[i]);
> if(n==1) printf("0\n");
> else Haffman(n);
> }
>
>
>
> // system("pause");
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator