锦标赛是一个完整的有向图,因此给定任意两个顶点u和v,它们之间存在有向边(如果你胜过v,那么边是从u到v)。
哈密尔顿之路始终存在于锦标赛中。所以给出了{u:[v,w],v:[w]}形式的邻接列表,其中有从u到w,u到v和v到w的有向边,我如何找到汉密尔顿路径是按顺序打印veritces?
即使你不了解python或其他什么,只要算法会非常有用。我已经考虑过了,我想我必须从最高度的顶点开始?然后添加具有第二高度等的顶点,直到具有最低度的顶点。但是我不知道这是一种失败安全的方法,具有最高度的顶点可能被顶点击败,具有第二高的顶点。
提前感谢您的帮助!
答案 0 :(得分:0)
您可以递归地解决此问题。假设您有n+1
个顶点v_0
到v_n
。对于大小为n的锦标赛,v_1
到v_n
以及它们之间的边缘,因此我们可以假设我们的哈密尔顿路径包含v_1
到v_n
。根据{{1}}到u_1
的路径重命名它们。现在找到u_n
,u_i
赢得u_i
而v_0
赢了v_0
(这里你应该处理边缘节点:{{1} }赢了u_i+1
或v_0
赢了u_1
)。在找到这样的u_n
之后,整个哈密顿路径可以构造为:
v_0
该算法的运行时间为O(n ^ 2)。这个问题存在O(nlogn)算法。