【问题标题】:How do you find the path that traverses the largest number of nodes in an undirected graph?如何在无向图中找到遍历最多节点的路径?
【发布时间】:2012-07-23 08:59:11
【问题描述】:

给定一个无向图和图中的两个任意节点(A 和 B),我如何找到通过最多唯一节点的路径以便在节点 A 和 B 之间导航?

我知道你可以深度搜索它并比较所有长度,但是有没有更好的方法?

【问题讨论】:

  • What have you tried? 即给我们看一些代码。
  • 深度优先搜索如何做到这一点?
  • @Joachim,我还没有尝试过任何东西。更多的是从算法的角度来看。
  • @default locale:只需使用深度搜索来获取所有路径,然后最长的就是答案
  • @JoachimPileborg 您发布的文章不错,但是!您了解您链接到的文章吗?文章明确指出it doesn’t mean “show me the code you’ve written, or piss off”。此外,他对问题的措辞清楚地表明这是值得帮助的,因为他说I know that ...。不管他知道什么,他都知道一些事情,他需要帮助来提炼他的知识。因此,我已经 +1 了这个问题。

标签: c++ algorithm data-structures graph graph-algorithm


【解决方案1】:

那是NP complete problem。你真正能做的就是尝试每一种可能性。

【讨论】:

  • 维基百科页面是关于在图中找到最长的路径。 OP询问具有固定端的最长路径。后者是否是 NP 完全的并不明显。
  • @defaultlocale 如果最长路径固定端问题可以在多项式时间内解决,那么一般最长路径问题也可以在多项式时间内解决(因为有 n(n+1 )/2 对可能的固定端)。
  • @defaultlocale:不幸的是,即使是固定端,您也必须搜索所有可能性。并且补充一下 zarkon 所说的,最长路径与 (longest-path-with-fixed-ends * n^2) 一样困难
【解决方案2】:

这个问题只有在我们讨论无环图时才有意义,所以我假设你是这个意思。

您将不得不暴力尝试所有可能的路径。

要了解原因,请想象一个图形,其中您知道两个节点的最长路径并添加一个节点。如果节点以某种方式连接到它们,您现在必须测试包含新节点的每条路径,包括您已经测试过的路径。

【讨论】:

  • 为什么图必须是非循环的?
  • 如果图是循环的,最长的路径可能是不确定的。如果图是连通的,那么每对节点都是如此。
  • @steffen OP 提到了唯一节点,所以我认为循环图是允许的
  • @zarkon: true... 在这种情况下,循环图是允许的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
相关资源
最近更新 更多