图(Graph)由顶点(Node)和边(Edge)构成,可分为有向图和无向图,带权图和无权图储存方式主要有两种,邻接矩阵或邻接链表。下面的代码是我用邻接矩阵法储存的图。
阅读更多
对一棵树的叶子全部赋权值,那么权值乘上叶子的高度的和最小的树就是哈夫曼树。
构造哈夫曼树的方法如下:
(1)令S={ w1,w2,…,wt }
(2)从S中取出两个最小的权wi和wj,画结点vi,带权wi,画结点vj,带权wj。画vi和vj的父亲v,连接vi和v,vj和v,令v带权wi+wj
(3)令S = (S - { wi,wj })∪{ wi+wj }
(4)判断S是否只有一个元素,若是,则停止,否则重复(2)(3)(4)。
这样的话,构造一棵哈夫曼树的C++代码就不难写了。
问题描述:
N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
源码: