【问题标题】:How to Find Number of Hamiltonian Paths in a graph?如何在图中找到哈密顿路径的数量?
【发布时间】:2017-01-17 09:09:07
【问题描述】:

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

问题链接

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

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

但我的问题是当我们考虑从完整图中删除了一些“x”条边时如何确定路径的数量(给出了删除的边)

【问题讨论】:

    标签: algorithm graph hamiltonian-cycle


    【解决方案1】:

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

    如果排列是 n! 的总数。

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

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

    【讨论】:

    • 如果一条边被禁止,那么我们是否考虑将两个顶点连接为一个顶点?你能解释一下链环是什么吗?
    • @Ezio 是的,两个连接的顶点被视为一个顶点。环绕意味着,比如边 (1,2) 被禁止,1 是排列的第一个元素,2 是最后一个。
    • 那么假设从n个顶点的完整图中去除了两条边,那么我们如何在数学上表示包含排除公式?
    • @Ezio 我们需要计算恰好有一个坏边的排列数,并从中减去有两个坏边的排列数。
    • 实际上我的问题是如何计算一些 x 坏边的排列数我可以应用包含排除原则但是当我们考虑让我们说 x 时我遇到了如何计算排列数的问题坏边
    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    相关资源
    最近更新 更多