带标号的连通图计数(算法训练手册112页,递推关系)

本文介绍带标号的连通图计数问题,通过递推关系分析求解。当顶点数为n时,计算连通图的数量。例如n=3时有4个,n=4时有38个。分析中提到f(n)表示连通图数量,g(n)表示非连通图数量,两者满足f(n)+g(n)=h(n),并通过组合数学公式推导g(n),最终得出f(n)。
摘要由CSDN通过智能技术生成

带标号的连通图计数

题目描述:

带标号的连通图计数。统计有n ( n<=50)个顶点的连通图有多少个。图的顶点有编号。例如n=3时有4个不同的图, n=4时有38个图;n=5,6时分别有728,26704个图

分析:

设f(n)为所求答案,g(n)为由n个顶点的非连通图,则f(n)+g(n)=h(n)=2n(n-1)/2

g(n)可以这样计算:先考虑1所在连通分量包含哪些顶点。假设1所在连通分量有k(k<n)个顶点,就有C(n-1,k-1)中取法,剩下的n-k的顶点随便共有h(n-k)中方法,根据加法原理

g ( n ) = ∑ k = 1 n − 1 C ( n − 1 , k − 1 ) ∗ f ( k ) ∗ h ( n − k ) g(n)= \sum_{k=1}^{n-1}C(n-1,k-1)*f(k)*h(n-k) gn=k=1n1C(n1,k1)f(k)h(nk)

f ( n ) = h ( n ) − g ( n ) f(n)=h(n)-g(n) f(n)=h(n)g(n)

初始状态

f(0)=1;算是一个空图

f(1)=1,h(1)=1,g(1)=0

因为数据较大,所以涉及到高精度乘法减法加法。

#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstring>
#include<string>
#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值