DSOJ Huffman coding tree(Huffman编码树)
来源:互联网 发布:国际科学数据服务平台 编辑:程序博客网 时间:2024/05/22 07:54
题目链接
#include<stdio.h>//Huffman coding tree#include<string.h>#include<stdlib.h>#define MAX 200//The maximum number of nodetypedef struct node{int weight;int parent, lchild, rchild;int flag;}HT;void initial(HT *TREE,int n)//Initialize the information of the node{int i = 1;for (; i <= n; i++){TREE[i].parent = 0;TREE[i].lchild = 0;TREE[i].rchild = 0;TREE[i].flag = 0;}}void select_min(HT *TREE, int n, int *s1, int *s2)//Select two nodes with the minimum weight whose flag is 0{int i;for (i = 1; i <= n; i++){if (TREE[i].flag == 0){*s1 = i;break;}}for (i = (*s1) + 1; i <= n; i++){if (TREE[i].flag == 0 && TREE[i].weight < TREE[*s1].weight)*s1 = i;}TREE[*s1].flag = 1;for (i = 1; i <= n; i++){if (TREE[i].flag == 0){*s2 = i;break;}}for (i = (*s2) + 1; i <= n; i++){if (TREE[i].flag == 0 && TREE[i].weight < TREE[*s2].weight)*s2 = i;}TREE[*s2].flag = 1;}void create_tree(HT *TREE, int n)//Create Huffman Tree{int m, i, s1, s2;m = 2 * n - 1;for (i = n + 1; i <= m; i++){select_min(TREE, i-1, &s1, &s2);TREE[s1].parent = i;TREE[s2].parent = i;TREE[i].lchild = s1;TREE[i].rchild = s2;TREE[i].weight = TREE[s1].weight + TREE[s2].weight;TREE[i].flag = 0;//initial}TREE[m].parent = 0;//The root node}int calculate_length(HT *TREE, int *sum, int n)//Calculate the minimum length of the path{int i, m, length = 0;for (i = 1; i <= n; i++){m = TREE[i].parent;while (m != 0){sum[i]++;//Sum storages the length of each nodem = TREE[m].parent;}}for (i = 1; i <= n; i++)length += sum[i] * TREE[i].weight;return length;}int main(){int i, N;int *sum;HT TREE[MAX];scanf("%d", &N);for (i = 1; i <= N; i++)//Position 0 is not used{scanf("%d", &TREE[i].weight);}sum = (int *)malloc(N*sizeof(int));for (i = 1; i <= N; i++)sum[i] = 0;initial(TREE, N);create_tree(TREE, N);printf("%d\n", calculate_length(TREE, sum, N));return 0;}
0 0
- DSOJ Huffman coding tree(Huffman编码树)
- Huffman编码(Huffman树)
- 霍夫曼编码(Huffman Coding)
- 霍夫曼编码(Huffman Coding)
- Huffman树&&Huffman编码
- Huffman coding tree(最小堆实现)
- [转]霍夫曼编码(Huffman Coding)
- huffman树和huffman编码
- huffman树和huffman编码
- Huffman树与Huffman编码
- Huffman树与Huffman编码
- Huffman树和Huffman编码
- Huffman树与Huffman编码
- Huffman树与Huffman编码
- Huffman树与Huffman编码
- <OJ_Sicily>Huffman coding哈夫曼编码
- Huffman coding.
- coding Huffman。。。
- 【J】layout_weight
- [Android Studio] Gradle
- [java]二、八、十、十六进制之间的转换
- 蓝懿iOS 技术内容和心得 12.19
- 完美爬犁
- DSOJ Huffman coding tree(Huffman编码树)
- UVALive 6919 A game for kids(树形dp)
- window搭建memcached
- java基础知识(2)抽象类和接口
- Hibernate设置时间戳的默认值和更新时间的自动更新
- 嵌入式外部中断控制编程方法论—比较CC2541(51核)和S5PV210(ARM核)
- 论坛日志处理项目总结
- 分布式微博爬虫运行中出现的问题及解决方法(持续更新)
- DSOJ BST(二叉搜索树)