【问题标题】:Is there a counter-example for this algorithm finding the Euler Path in a Eulerian Graph?在欧拉图中找到欧拉路径的算法是否有反例?
【发布时间】:2017-08-27 13:40:25
【问题描述】:

以下是在欧拉图中找到欧拉路径的给定算法。但是,据说有一个顶点少于10个的反例。给定的欧拉图是无向的,每个顶点的度数都是偶数,并且会在同一个顶点开始和结束。

1. Perform a DFS traversal of G and number the vertices in DFS-preorder.
2. Re-initialize all vertices and edges of G as unused.
3. Produce a cycle as follows:
    Start from the vertex with preorder number 1 (computed in step 1), and
    repeatedly go to the vertex with highest preorder number possible along 
    an unused edge.
    Stop when all edges incident to the current vertex are used.

在过去的 3 天里,我一直在尝试从 6 到 9 的顶点,但我真的想不出一个例子。任何帮助表示赞赏!谢谢。

【问题讨论】:

  • 是什么让你认为有反例? “欧拉图”是指具有欧拉路径还是欧拉环的图?
  • @Codor 感谢您的回复。通过欧拉图,这意味着每个顶点都有一个偶数。应该有一个反例,因为提示说反例的顶点少于 10 个。
  • 好的,那我想知道是什么让你认为有一个反例;如果每个顶点的度数相等,我相信,无论邻居的偏好如何,都不会卡住。
  • 嗯,有卡住的机会;这个问题很有趣——到目前为止,我还没有想出一个反例。太神奇了。
  • 如果我错了,请纠正我,但不会为 A ---- B \ / C / \ D ---- E 使用 DFS-C A B D E 现在C 是节点号 1 我们将从它开始,并且必须再次访问它才能进入另一个循环。如果我对您的代码的理解是正确的,则具有 2 个或更多周期的公共节点的类似示例将给出错误。

标签: graph-algorithm depth-first-search pseudocode euler-path


【解决方案1】:

我将其发布为 answer,因为我不知道如何在 comment 中正确显示图表,如您所见。

如果我错了,请纠正我,但算法不会因以下图表而被击中-

 A---B
  \ /
   C 
  / \
 D---E

使用 DFS-C A B D E

现在C 是节点号 1,我们将从它开始,并且必须再次访问它才能进入另一个循环。

如果我对您的代码的理解是正确的,则具有 2 个或更多循环的公共节点的类似图将出错。

PS- 谁能告诉我如何在评论中开始换行

【讨论】:

  • 我不确定我是否正确理解了您的观点;从C开始并使用给定的DFS序列,所提出的算法成功。
【解决方案2】:

欧拉图是每个顶点的度数为偶数的图的定义有点迂腐,如果我们认为该图是不连通的呢?

A---C   E---G
|   |   |   |
B---D   F---H

要在不同的组件上运行 DFS - 需要在 #1 之前有一个步骤来发现完整的图表。

以下图表也无法正常工作,因为算法会采用以下路径:{0,3,4,7,1,3,2,1,0} 缺少 5,6。

【讨论】:

    猜你喜欢
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多