代码之家  ›  专栏  ›  技术社区  ›  int3

如何使用循环查找算法查找欧拉路径?

  •  2
  • int3  · 技术社区  · 15 年前

    我正试图理解所描述的算法 here 但解释不太清楚:

    'tour' is a stack
    
    find_tour(u):
        for each edge e=(u,v) in E:
            remove e from E
            find_tour(v)
        prepend u to tour
    
    to find the tour, clear stack 'tour' and call find_tour(u),
    where u is any vertex with a non-zero degree.
    

    “预先准备”是什么意思 u 堆栈?里面的元素怎么样 tour 甚至用于 find_tour ?如果有人能向我解释,我会很高兴的,谢谢!

    2 回复  |  直到 11 年前
        1
  •  3
  •   Matti Lyra    15 年前

    堆栈“prepend”是一个push。所以将顶点U推到堆栈顶部。其思想是,从任何顶点开始,该顶点上至少有一条边。跟随所有边,离开开始顶点,在删除边后递归调用函数(这样您就不会返回同一条边)。

    巡演中的元素根本没有被“发现巡演”使用。它只是一个数据存储区,用于恢复算法完成后图形的遍历顺序。要返回巡更,只需继续调用tour.pop(),直到堆栈为空。如果该顶点有许多边,它可能多次包含相同的顶点,但因为每次在递归调用“查找”程序之前,都会删除保留顶点的边,因此函数最终将完成。

    oh和e是图中所有的边,(u,v)是从u到v的边。

        2
  •  0
  •   PerseP    12 年前

    该算法适用于有向图。 对于无向图,请记住:

    (u,v) == (v, u)