16. 计算WPL

Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。

输入:
    第一行为要编码的符号数量n
    第二行~第n+1行为每个符号出现的频率

输出:
    对应哈夫曼树的带权路径长度WPL

#include<stdio.h>
#include<stdlib.h>
#include<limits.h>

int n, sum = 0;
int num[10005] = { 0 };
int count = 0;


int main()
{
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
        scanf("%d", &num[i]);
    int flag = n;
    while (flag > 1)
    {
        int min1 = INT_MAX, x1;
        int min2 = INT_MAX, x2;
        for(int i = 0; i < n; i++){
            if(num[i] < min1){
                min1 = num[i];
                x1 = i;
            }
        }
        num[x1] = INT_MAX;
        for(int i = 0; i < n; i++){
            if(num[i] < min2){
                min2 = num[i];
                x2 = i;
            }
        }
        num[x2] = INT_MAX;
        num[x1] = min1 + min2;
        sum  = sum + min1 + min2;
        flag--;
    }
    printf("WPL=%d\n", sum);
    //system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41207175/article/details/85016880