我正在尝试理解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
中使用?如果有人能向我解释,我会很高兴,谢谢!
答案 0 :(得分:3)
堆栈'prepend'是推送。所以你将顶点u推到堆栈顶部。这个想法是你从任何至少有一个边缘的顶点开始。沿着所有边缘离开起始顶点,在移除边缘后递归调用函数(这样你就不会回到同一边缘)。
游戏中的元素根本不被find_tour使用。它只是一个数据存储区,用于恢复算法完成后遍历图形的顺序。要返回游览,请继续调用tour.pop()直到堆栈为空。它可能包含相同的顶点很多次,如果该顶点有很多边,但因为每次在递归调用find_tour之前你都会删除边缘,留下一个顶点,函数最终会完成。
哦,E是图中的所有边,(u,v)是从u到v的边。
答案 1 :(得分:0)
该算法适用于有向图。 对于无向图,请记住:
(u,v) == (v, u)