寻找哈密顿路径和哈密顿循环

时间:2018-01-13 09:22:03

标签: java jgrapht hamiltonian-cycle hamiltonian-path

我在JGraphT中有一个4875|7854|74|1 ,想知道是否有

  1. 哈密尔顿路径

  2. 汉密尔顿循环

  3. 如果存在,我也想得到它。

    我只找到TwoApproxMetricTSPHamiltonianCycle

    但两者都需要完整的图表。

    一个明显的解决方案是在我的图表中添加边缘并使其成为加权图表,其中添加边缘的权重非常高,以至于它们不会在路径中使用。

    但这会增加许多边缘,我想避免这种情况。

    有没有更好的方法来获得汉密尔顿路径/循环而不自行实现算法?

1 个答案:

答案 0 :(得分:1)

决策问题“图表是否包含哈密顿循环(HC)”是NP-Complete。 JGraphT不包括使用不完整图形的算法,因此唯一的解决方案是通过添加具有足够大权重的边来使图形完整。然后,当且仅当您找到没有添加任何昂贵边缘的游览时,才存在HC。 请注意,在下一个版本(1.1.1)中,有一个新的精确算法(参见master branch,Held Karp动态编程方法)。该算法不能超过32个顶点。如果你有一个大图,我的建议是使用TwoApproxMetricTSP。如果您确实需要求解(合理大小)图形,则必须采用线性规划。另请参阅TSP解算器Concorde。对于大多数TSP应用程序,我将实现专用的,高效的数据结构,例如,将边/邻居存储在整数数组中。