【SSLGZ 1408】(树)哈夫曼树(二)
来源:互联网 发布:上海虹桥电缆网络销售 编辑:程序博客网 时间:2024/04/30 06:12
问题描述
从a开始的n个字母分别表示n个结点,分别代n个权值,以它们为叶子结点构造一棵哈夫曼树(若两节点权值相等,按照字典排序构造),最后求该哈夫曼树路径长。
样例输入
7
a b c d e f g
3 7 8 2 5 8 4
样例输出
a:1101
b:111
c:00
d:1100
e:101
f:01
g:100
100
算法讨论
主要还是构造哈弗曼树,最后输出要按字典输出,再求一下路径长度。(感觉自己写得比较麻烦)
const maxn=100;var a,b:array[0..maxn,1..2] of longint; f:array[0..maxn,1..3] of longint; v:array[1..maxn] of string; v1:array[1..maxn] of longint; d:array[1..maxn] of boolean; i,j,k,n,t,ans:longint; flag:boolean; st:string; c:char;procedure sort(k:longint);var i,j,t:longint;begin for i:=1 to k-1 do for j:=i+1 to k do if (a[i,1]>a[j,1]) or ((a[i,1]=a[j,1]) and (a[i,2]>a[j,2])) then begin t:=a[i,1]; a[i,1]:=a[j,1]; a[j,1]:=t; t:=a[i,2]; a[i,2]:=a[j,2]; a[j,2]:=t end;end;procedure vist(t:longint);begin if f[t,1]=0 then begin flag:=true; exit end; st:=st+'0'; inc(i); vist(f[t,2]); dec(i); delete(st,i,1); st:=st+'1'; inc(i); vist(f[t,3]); dec(i); delete(st,i,1); if flag then begin v[j]:=st; v1[j]:=f[t,1]; inc(j); flag:=false end else inc(ans,f[t,1]);end;begin readln(n); for i:=1 to 2*n-1 do read(c); for i:=1 to n do begin read(a[i,1]); f[i,1]:=a[i,1]; a[i,2]:=i end; b:=a; t:=n+1; i:=n; while i>1 do begin sort(i); f[t,1]:=a[1,1]+a[2,1]; f[t,2]:=a[1,2]; f[t,3]:=a[2,2]; a[1,1]:=f[t,1]; a[1,2]:=t; a[2,1]:=a[i,1]; a[2,2]:=a[i,2]; inc(t); dec(i) end; i:=1; j:=1; vist(t-1); for i:=1 to n do for j:=1 to n do if (b[i,1]=v1[j]) and (d[j]=false) then begin write(chr(96+i),':'); writeln(v[j]); d[j]:=true; break end; write(ans)end.
Pixiv ID:60470658
0 0
- 【SSLGZ 1408】(树)哈夫曼树(二)
- 【SSLGZ 1407】(树)哈夫曼树(一)
- 【SSLGZ 1409】(树)哈夫曼树(三)
- 【SSLGZ 2645】线段树练习题二
- 【SSLGZ 2759】挖矿(dp)
- 【SSLGZ 2644】线段树练习题一
- 【SSLGZ 2646】线段树练习三
- 【SSLGZ 2647】线段树练习四
- 【SSLGZ 2648】线段树练习五
- 【SSLGZ 1760】商店选址问题(Dijkstra)
- 【SSLGZ 1614】医院设置(Dijkstra)
- 【SSLGZ 1613】最短路径问题(Floyd)
- 【SSLGZ 2776】2017年10月19日提高组 整除(number)(容斥原理)
- 【SSLGZ 2780】2017年10月20日提高T2 收银员(01背包)
- 【SSLGZ 2793】2017年10月26日提高组T2 Deep(博弈)
- 【SSLGZ 2794】2017年10月26日提高组T2 Dark(dp)
- 【SSLGZ 1618】剑鱼行动
- 【SSLGZ 1615】Frogger
- 14.C++ 继承和派生类
- QT使用通知区域小图标
- 442. Find All Duplicates in an Array
- 客户端读取服务器信息tcp
- shiro-密码比较的设计 CredentialsMatcher -为什么Java中的密码优先使用 char[] 而不是String?
- 【SSLGZ 1408】(树)哈夫曼树(二)
- 结构体类型struct(c++)
- springMVC源码分析--SimpleControllerHandlerAdapter(三)
- SpringMVC整合Mybatis之文件上传与下载
- struts.xml配置文件的内容标签
- Selector
- C语言动态数据结构
- 利用方法计算程序段的运行时间
- exec族,以execl为例