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

时间:2009-12-13 12:55:07

标签: algorithm language-agnostic graph

我正在尝试理解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.

将'{1}}'前置'到堆栈是什么意思? u中的元素如何在tour中使用?如果有人能向我解释,我会很高兴,谢谢!

2 个答案:

答案 0 :(得分:3)

堆栈'prepend'是推送。所以你将顶点u推到堆栈顶部。这个想法是你从任何至少有一个边缘的顶点开始。沿着所有边缘离开起始顶点,在移除边缘后递归调用函数(这样你就不会回到同一边缘)。

游戏中的元素根本不被find_tour使用。它只是一个数据存储区,用于恢复算法完成后遍历图形的顺序。要返回游览,请继续调用tour.pop()直到堆栈为空。它可能包含相同的顶点很多次,如果该顶点有很多边,但因为每次在递归调用find_tour之前你都会删除边缘,留下一个顶点,函数最终会完成。

哦,E是图中的所有边,(u,v)是从u到v的边。

答案 1 :(得分:0)

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

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