读书人

哈弗曼算法帮忙看下代码。解决办法

发布时间: 2013-12-02 12:00:40 作者: rapoo

哈弗曼算法,帮忙看下代码。。。




为什么我第29行的输出总是不能得到正确的数值。。。。。
[解决办法]
调select函数时没初始化

HuffmanTree函数你打印的地方有问题,i,j不配对


#include <iostream>
using namespace std;

struct element
{
int weight;
int f; //标志位
int lchild,rchild,parent;
};



void Select(element c[],int a,int b);


void HuffmanTree(element huffTree[],int w[],int n)
{
int i = 0;
int j = 0;
for(i=0;i<2*n-1;i++)
{
huffTree[i].parent=-1;
huffTree[i].lchild=-1;
huffTree[i].rchild=-1;

}
for(j=0;j<n;j++)
huffTree[j].weight=w[j];
for(j=0;j<n;j++)
cout<<huffTree[j].weight<<endl;
int i1,i2;
for(int k=n;k<2*n-1;k++)
{
i1 = 0;
i2 = 0;
Select(huffTree,i1,i2);
huffTree[i1].parent=k;
huffTree[i2].parent=k;
huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight;
huffTree[k].lchild=i1;
huffTree[k].rchild=i2;

}

}



void Select(element c[],int a,int b)
{
a=0;
int i=0;
int j=0;

for(i=1;c[i].weight!=NULL&&c[i].f!=1;i++)
{
if(c[i].weight<c[a].weight)
a=i;
}
c[a].f=1;
if(a==0)
{ b=1;

}
else
{
b=0;
for(i=1;c[i].weight!=NULL&&c[i].f!=1;i++)
{
if(i==a)continue;
if(c[i].weight<c[b].weight)
b=i;

}


c[b].f=1;
}

}


void main(){
int n;
element aaa[100];
cout<<"请输入要编码的叶子节点个数:"<<endl;
cin>>n;
cout<<"请输入各叶子节点的权值:"<<endl;
int *w=new int[n];
for(int i=0;i<n;i++)
cin>>w[i];
HuffmanTree(aaa,w,n);

}

读书人网 >C++

热点推荐