| ||||||||||
| 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;
const int MAX = 20001;
const int hufnum = 40002;
const int maxint = 60000;
int n;
int blanks[MAX];
__int64 sum;
typedef struct node
{
int weight;
int lchild;
int rchild;
int parent;
}huftree;
huftree tree[MAX*2];
void creattreehufman()
{
int i,j,p1,p2;
float least1,least2;
for(i = 1; i <= n * 2; i++)
{
tree[i].parent = 0;
tree[i].lchild = 0;
tree[i].rchild = 0;
tree[i].weight = 0;
}
for(i = 1; i <= n; i++)
{
tree[i].weight = blanks[i];
}
for(i = n + 1 ; i < n * 2 ; i++)
{
p1 = 0;
p2 = 0;
least1 = maxint;
least2 = maxint;
for(j = 1; j < i; j++)
{
if(tree[j].parent == 0)
{
if(tree[j].weight < least1)
{
least2 = least1;
least1 = tree[j].weight;
p2 = p1;
p1 =j;
}
else
{
if(tree[j].weight < least2)
{
least2 = tree[j].weight;
p2 = j;
}
}
}
}
tree[p1].parent = i;
tree[p2].parent = i;
tree[i].lchild = p1;
tree[i].rchild = p2;
tree[i].weight = tree[p1].weight + tree[p2].weight;
sum += tree[i].weight;
}
tree[2*n - 1].parent = 0;
}
int main()
{
int i,j;
while(cin>>n)
{
sum = 0;
for(i = 1; i <= n; i++)
{
cin>>blanks[i];
}
creattreehufman();
cout<<sum<<endl;
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator