POJ 1737 统计有n个顶点的连通图有多少个 (带标号)

博客介绍了如何计算有n个顶点的连通图的个数。通过分析n个顶点的非联通图g(n)与总情况h(n)的关系,提出递推公式g(n) = Σ[C(n - 1, k - 1) * f(k) * h(n - k)],其中k从1到n-1。递推公式用于解决这类问题。" 110785863,10293395,Abaqus运行Python脚本实战指南,"['Abaqus', 'Python', 'CAE', '二次开发', '命令行接口']
摘要由CSDN通过智能技术生成

设f(n)为所求答案

g(n)为n个顶点的非联通图

则f(n) + g(n) = h(n) = 2^(n * (n - 1) / 2)

其中h(n)是n个顶点的联图的个数


这样计算

先考虑1所在的连通分量包含哪些顶点

假设该连通分量有k个顶点

就有C(n - 1, k - 1)种集合

确定点集后,所在的连通分量有f(k)种情况。其他连通分量有 h(n - k)种情况

因此有递推公式。g(n) = sum{ C(n - 1, k - 1) * f(k) * h(n - k)} 其中k = 1,2...n-1

注意每次计算出g(n)后立刻算出f(n)


import java.math.BigInteger;
import java.util.Scanner;


public class Main {

	
	public static void main(String[] args) {
		BigInteger two[] = new BigInteger [55];
		two[0] = BigInteger.ONE;
		for(int i = 1; i <= 50; i++)
			two[i] = two[i - 1].multiply(BigInteger.valueOf(2));
		BigInteger h[] = new BigInteger [55];
		for(int i = 1; i <= 50; i++){
			int a = i;
			int b = i - 1;
			if(a % 2 == 0) a/= 2;
			else b /= 2;
			h[i] = BigInteger.ONE;
			
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值