如何在图中找到哈密顿路径的数量?

时间:2017-01-17 09:09:08

标签: algorithm graph hamiltonian-cycle

我正在尝试这个Google Codejam问题,如果我们从完整的图表中删除k个边缘,就会找出哈密顿路径的数量

链接到问题

https://code.google.com/codejam/contest/32004/dashboard#s=p2

我发现我们可以使用包含排除原则来找出数字

但我的问题是当我们考虑从完整的图形中移除一些'x'个边缘时(边缘被移除),如何确定路径的数量

1 个答案:

答案 0 :(得分:0)

这个想法是计算排列而不是计算路径。这样,每条路径将被考虑2 * n次。

排列的总数是n!。

让我们使用inculsion-exlusion原则来计算不良循环。如果禁止一条边,则有2 * n *(n-2)!包含此边的路径(我们将两个相邻的顶点放在一起,其余的放在任何地方)。

如果存在多个禁止边,则所有矩阵被分成几个独立的组(它们形成由这些边连接的链)。有两种方法可以放置每个组(因为它可以颠倒)。所有组都可以任意相互置换。其余的元素可以放在任何地方(它将作为二项式系数乘以一些因子)。还有一个警告:链条可以环绕。但最多只能有一个这样的链条。因此,我们可以使用上述算法迭代包裹并计算放置其余数据的方式的链。