| ||||||||||
| 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 | |||||||||
用哈夫曼做的,一直wa,求大神帮看下代码~~~#include<iostream>
using namespace std;
int i,j,k;
const int MaxSize=20001;
struct element
{
int weight;
int lchild,rchild,parent;
};
void Select(element huffTree[],int n,int m)
{
int tmp;
long long sum=0;
for(i=n+1;i<=m;i++)
{
int min1,min2,s1,s2;
min1=min2=MaxSize;
for(j=1;j<=i-1;j++)
{
if(huffTree[j].parent==-1&&huffTree[j].weight<min1)
{
min1=huffTree[j].weight;
s1=j;
}
}
for(k=1;k<=i-1;k++)
{
if(huffTree[k].parent==-1&&k!=s1&&huffTree[k].weight<min2)
{
min2=huffTree[k].weight;
s2=k;
}
}
if(min1>=min2)
{
tmp=s1;
s1=s2;
s2=tmp;
}
huffTree[s1].parent=i;
huffTree[s2].parent=i;
huffTree[i].lchild=s1;
huffTree[i].rchild=s2;
huffTree[i].weight=huffTree[s1].weight+huffTree[s2].weight;
sum+=huffTree[i].weight;
}
cout<<sum<<endl;
}
void HuffmanTree(element huffTree[],int w[],int n)
{
for(i=1;i<=2*n-1;i++)
{
huffTree[i].parent=-1;
huffTree[i].lchild=-1;
huffTree[i].rchild=-1;
}
for(i=1;i<=n;i++)
huffTree[i].weight=w[i];
for(k=n;k<2*n-1;k++)
Select(huffTree,k,2*n-1);
}
int main()
{
element huff[MaxSize];
int a[MaxSize],n;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
HuffmanTree(huff,a,n);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator