树有很多种形态,给定结点个数,求生成不同形态二叉树的个数,显然要用到Catalan数列。
那如果给定一个图(Graph)(G=(V,E)),要求其最小生成树G',最好的方法莫过于Prim或Kruskal了。
上图就是一种求最小生成树的方法。
可要求图G中不同生成树的总个数呢?
这里要用到Kirchhoff's theoreom,一个神奇的定理。
这里只做简单的介绍,并不给出严格的证明。
详细内容请参见Wikipedia::Kirchhoff's theorem
以及芜湖一中 周冬さん的生成树的计数及其应用 论文版
符号约定:
- 图(G)
- 度数矩阵(D[G])
- 邻接矩阵(A[G]),其中,若存在边((v_i,v_j)),则记(a_{ij}=a_{ji}=1)
- Kirchhoff矩阵(C[G]=D[G]-A[G])
删去(C[G])中的第r行和第r列,得到(C_r[G])
计算(C_r[G])的行列式(det C_r[G]),得出的结果记为(d)
则(G)的生成树个数(t(G)=|d|)
至此,我们解决了这个不常见的问题。