日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 801 Haffman编码

發布時間:2025/3/16 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 801 Haffman编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Haffman編碼

時間限制:1000?ms ?|? 內存限制:65535?KB 難度:3 描述

哈弗曼編碼大家一定很熟悉吧(不熟悉也沒關系,自己查去。。。)。現在給你一串字符以及它們所對應的權值,讓你構造哈弗曼樹,從而確定每個字符的哈弗曼編碼。當然,這里有一些小規定:

1.規定哈弗曼樹的左子樹編碼為0,右子樹編碼為1;

2.若兩個字符權值相同,則ASCII碼值小的字符為左孩子,大的為右孩子;

3.創建的新節點所代表的字符與它的左孩子的字符相同;

4.所有字符為ASCII碼表上32-96之間的字符(即“ ”到“`”之間的字符)。

輸入
輸入包含多組數據(不超過100組)
每組數據第一行一個整數n,表示字符個數。接下來n行,每行有一個字符ch和一個整數weight,表示字符ch所對應的權值,中間用空格隔開。
輸入數據保證每組測試數據的字符不會重復。
輸出
對于每組測試數據,按照輸入順序輸出相應的字符以及它們的哈弗曼編碼結果,具體格式見樣例。
樣例輸入
3 a 10 b 5 c 8 4 a 1 b 1 c 1 d 1
樣例輸出
a:0 b:10 c:11 a:00 b:01 c:10 d:11
AC碼:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define INF 99999999 struct node {char ch;char *str; // 用于存儲Huffman編碼int weight;int parent;int LChild;int RChild; }num[200]; int main() {int n,min1,min2,s1,s2,i,j,m;int start,c,p;char *cd; // 臨時存儲Huffman編碼while(~scanf("%d",&n)){for(i=1;i<=n;i++){getchar();scanf("%c%d",&num[i].ch,&num[i].weight);num[i].parent=0;num[i].LChild=0;num[i].RChild=0;}m=2*n;for(i=n+1;i<m;i++){num[i].weight=0;num[i].parent=0;num[i].LChild=0;num[i].RChild=0;}// 構造Huffman樹for(i=n+1;i<m;i++){min1=min2=INF;s1=s2=0;for(j=1;j<=i-1;j++){if(num[j].parent!=0)continue;if(min1>num[j].weight){min2=min1;min1=num[j].weight;s2=s1;s1=j;}else if(min1==num[j].weight&&num[s1].ch>num[j].ch){min2=min1;min1=num[j].weight;s2=s1;s1=j;}else if(min2>num[j].weight){min2=num[j].weight;s2=j;}else if(min2==num[j].weight&&num[s2].ch>num[j].ch){min2=num[j].weight;s2=j;}}num[i].weight=num[s1].weight+num[s2].weight;num[s1].parent=i;num[s2].parent=i;if(num[s1].weight==num[s2].weight){if(num[s1].ch>num[s2].ch){num[i].ch=num[s2].ch;num[i].LChild=s2;num[i].RChild=s1;}if(num[s1].ch<num[s2].ch){num[i].ch=num[s1].ch;num[i].LChild=s1;num[i].RChild=s2;}}else{num[i].ch=num[s1].ch;num[i].LChild=s1;num[i].RChild=s2;}}// Huffman樹構造完畢// 求Huffman編碼cd=(char *)malloc(n*sizeof(char));cd[n-1]='\0';for(i=1;i<=n;i++){start=n-1;c=i;p=num[i].parent;while(p!=0){--start;if(num[p].LChild==c)cd[start]='0';elsecd[start]='1';c=p;p=num[p].parent;}num[i].str=(char *)malloc((n-start)*sizeof(char));strcpy(num[i].str,&cd[start]);}free(cd);for(i=1;i<=n;i++)printf("%c:%s\n",num[i].ch,num[i].str);}return 0; }

總結

以上是生活随笔為你收集整理的NYOJ 801 Haffman编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男生尿隔着内裤呲出来视频 | 一级片免费观看视频 | 精品久久一 | 乳揉みま痴汉4在线播放 | 欧洲免费毛片 | 小镇姑娘1979版 | 国产精品嫩草久久久久 | 日本东京热一区二区三区 | 蜜桃va| 久久爰 | 精品熟女一区二区 | 又黄又爽的免费视频 | 青娱乐av在线 | av片子在线观看 | 亚洲国产99 | 一本一道久久综合 | 国产午夜一级一片免费播放 | 最全aⅴ番号库网 | 欧美乱妇高清无乱码 | 亚洲九九夜夜 | 日韩电影一二三区 | 秋霞99| 日韩高清不卡在线 | a国产免费 | 亚洲高清久久久 | 在线免费观看中文字幕 | 伊人一级片 | av 一区二区三区 | 日本久久伊人 | 亚洲69视频 | 久久久男人天堂 | 美日韩中文字幕 | 日韩午夜 | 欧美黄色三级视频 | 欧美日韩一卡 | 欧洲熟妇的性久久久久久 | 免费毛片大全 | 黄色高清无遮挡 | xxx在线播放| 香蕉视频免费在线播放 | 超碰在线香蕉 | 日韩精品一线二线三线 | 日韩国产欧美精品 | xxxx69视频| 亚洲自拍第三页 | 国产在线视频在线观看 | 奇米777第四色 | 国产午夜大地久久 | 一区二区三区视频免费看 | av在线专区| 少妇特黄a一区二区三区 | 免费黡色av | 精品午夜一区二区三区在线观看 | jizz一区 | 三级男人添奶爽爽爽视频 | 熟女少妇精品一区二区 | 日韩av片在线 | 亚洲s码欧洲m码国产av | 人成精品 | 天狂传说之巴啦啦小魔仙 | 久久久久久久久久一区二区 | 国产在线专区 | 91九色视频 | 欧美福利一区 | 日本福利视频导航 | 秋霞成人 | 久操热线| 九九九九色 | 看黄色一级视频 | 狠狠干少妇 | 操在线视频| 日本视频网站在线观看 | 亚洲视频一区在线 | 国产亚洲性欧美日韩在线观看软件 | 国产在线三区 | www夜片内射视频日韩精品成人 | 日韩欧美中文字幕一区 | 林雅儿欧洲留学恋爱日记在线 | 亚洲AV无码一区二区伊人久久 | 精品人妻少妇AV无码专区 | 亚洲红桃视频 | 色94色欧美 | zzji欧美大片 | 久久视频中文字幕 | 亚洲+小说+欧美+激情+另类 | 91l九色lporny | 黄色一级免费观看 | 国产又粗又大又长 | 国产成人精品一区二区三区无码熬 | 呦呦网 | av新天堂| 亚洲 欧美 激情 另类 校园 | 少妇呻吟视频 | 香蕉av一区二区三区 | 4438亚洲最大 | 久操视频免费看 | 日韩区欧美区 | 99久久精品无免国产免费 | 色久月|