我写了个huffman树的c程序,但是结果却不对:(

asvaboy1980 2002-11-04 04:23:34
程序如下:
#include<stdio.h>
typedef struct
{ int weight;
int lchild,rchild,parent;
}HTNode;
typedef HTNode HuffmanTree[200];

void InitHuffman(HuffmanTree T,int m)
{ int i;
for(i= 0 ;i<m;i++)
{ T[i].weight=0;
T[i].lchild=T[i].rchild=T[i].parent=-1;
}
}
void Inputweight(HuffmanTree T,int n)
{ int i,w;
printf("Input weight:\n");
for(i = 0;i<n;i++)
{ scanf("%d",&w);
T[i].weight=w;
}
}

void SelectMin(HuffmanTree T,int n,int *p1,int *p2)
{ int i;
*p1=*p2=0;
for(i =1;i<=n;i++)
if((T[i].weight<T[*p1].weight)&&(T[i].parent==-1)) *p1=i;
for(i = 1;i<=n;i++)
if((i!=*p1)&&(T[i].weight<T[*p2].weight)&&(T[i].parent==-1))
*p2=i;

}
void CreateHuffman(HuffmanTree T,int n,int m)
{ int i,p1,p2;
InitHuffman(T,m);
Inputweight(T,n);
for(i = n;i<m;i++)
{ SelectMin(T,i-1,&p1,&p2);
{ T[p1].parent=T[p2].parent=i;
T[i].lchild=p1;
T[i].rchild=p2;
T[i].parent=-1;
T[i].weight=T[p1].weight+T[p2].weight;
}
}
}
main()
{ HuffmanTree T;
int i,n;
printf("Input n:\n");
scanf("%d",&n);
CreateHuffman(T,n,2*n-1);
printf("Output:\n");
printf("T[i] weight lchild rchild parent\n");
for(i = 0;i<2*n-1;i++)
{ printf("%-10d",i);
printf("%-10d",T[i].weight);
printf("%-10d%-10d",T[i].lchild,T[i].rchild);
printf("%-10d",T[i].parent);
printf("\n");
}
}


编译时能通过,但是结果不对,希望高手指点------只要能解决,一定给分
...全文
80 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandrowjw 2002-11-04
  • 打赏
  • 举报
回复
看得不是太仔细,可能是SelectMin函数里面初始化p1,p2不对,不能等于0,实际上你可以在节点数组的第一个位置放一个足够大的数,然后放置初始节点从第二个位置开始,这样就不用改p1,p2了。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧