传送门:顾森大爷的博客.
一棵有编号的树如何用一个序列表示?Prüfer编码出奇迹。
一共有n-2次操作:
找到当前叶子节点中编号最小的那个点x,输出与x相邻的点,删掉x。
由于没有出现在序列里的序号恰好是是叶子节点,所以每次找到每次找到序号最小的叶子节点,与序列的对应项形成一条边,把这个叶子删掉,继续考虑即可。
*一棵树对应唯一一个Prüfer编码,一个Prüfer编码也对应唯一一棵树。
n个点的完全图的生成树个数个数是 nn−2 n n − 2 。
因为一个Prüfer编码对应一棵树,而点数为n的Prüfer编码长度是n-2,每个位置有n种可能,所以为 nn−2 n n − 2 。
推导:
设编号为i的点的度数是 di d i ,则树的个数是 (n−2)!∏(di−1)! ( n − 2 ) ! ∏ ( d i − 1 ) ! ,这相当于有重复元素的排列问题。