Huffman c language learning record

#include<stdio.h>

struct point
{
	int size;
	int Fa;
	int zuo;
	int you;
}arr[100];


void New(int i,int a,int b,int A,int B)
{
	arr[A].Fa=i;
	arr[B].Fa=i;
	arr[i].size=arr[A].size+arr[B].size;
	arr[i].zuo=A;
	arr[i].you=B;
	
}

void build(int n)
{
	int a,b,i ,j,m,A,B;

	for(i=1;i<=100;i++)
	{
		arr[i].Fa=0;
	}

	m=2*n-1;

	for(i = n+1; i<=m;i++)
	{
		a=9999;b=9999;
		for(j=1 ; j <= i-1 ; j++)
		{
			if(arr[j].Fa==0 && arr[j].size < a)//找两个最小的数
			{
				a = arr[j].size;
				A=j;
			}
			else if(arr[j].Fa==0 && arr[j].size < b)
			{
				b = arr[j].size;
				B=j;
			}
		}
		New(i,a,b,A,B);
	}
}


int main()
{
	int n,i;

	scanf("%d",&n);

	for( i = 1 ; i <= n ; i++)
	{
		scanf("%d",&arr[i].size);
	}
	build(n);

	printf("  左孩子  右孩子  父亲节点  大小\n");

	for(i=1;i<=2*n-1;i++)
	{
		printf("i=%d  %d  %d  %d  %d\n",i,arr[i].zuo,arr[i].you,arr[i].Fa,arr[i].size);
	}

	return 0;
}

Guess you like

Origin blog.csdn.net/wu__peng/article/details/50208989