首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-12-02 
哈弗曼算法,帮忙看下代码。。。为什么我第29行的输出总是不能得到正确的数值。。。。。[解决办法]调select函数时没

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




为什么我第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);

}

热点排行