有人可以把我介绍给汉密尔顿循环吗?

时间:2011-03-16 09:30:50

标签: java data-structures hamiltonian-cycle

我有这个项目,我必须提出实现哈密顿循环的Java源代码。 我在谷歌搜索,至少现在我知道汉密尔顿循环是什么,除了起始顶点之外只穿过所有顶点的路径,因为它也是最后一个顶点(告诉我,如果我错了)。 问题是我不知道如何实现它。基本上,我的问题是:

  1. 你如何实施汉密尔顿循环?
  2. 汉密尔顿循环的应用是什么(这有助于理解为什么它如此重要)

4 个答案:

答案 0 :(得分:3)

  1. 你没有实现哈密顿循环,你找到它(或者发现你的给定图形不存在)。由于这是一个NP完全问题,这意味着这可能不是一个有效的解决方案,我只需要实现一个简单的backtracking算法。由于您正在寻找一个循环,因此您在哪个节点开始并不重要。
  2. 哈密尔顿循环可用于zero-knowledge proofs的密码学。 我不确定这仍然只是研究,还是在任何加密协议中都被积极使用。

答案 1 :(得分:0)

这是家庭作业吗?如果是这样,请将其标记为。

如果可以使用递归(如果图形太大则不是这种情况),很容易实现它。你要做的是编写一个函数,将图形作为参数(对此有不同的表示),函数检查图形是否只包含起始点,如果是,则返回,如果没有返回,则递归调用自身每个节点N仍然在图中,并将图形减去节点N作为参数。

答案 2 :(得分:0)

最简单的方法是从一个节点开始,“标记它”,选择下一个可到达的“未标记”节点,“标记它”,并继续直到:

  • 你到达起始节点,因此你找到了汉密尔顿循环。对每个节点重复该循环,以查找该图中的每个哈密顿循环。
  • 您无法选择另一个“未标记”节点,这意味着该起始节点没有哈密顿循环(但您发现哈密顿路径,无论如何)。

该算法可以通过多种方式进行优化,但我会告诉您。您找到的任何解决方案都将是NP完整的。

至于他们的使用,我只在Graph理论和AI类中看到它们(这是一个特殊的旅行者问题,每个边缘的成本为1)并且它们从未告诉我实际用途。

答案 3 :(得分:0)

(B)实际应用

  • 确定最有效的电话系统交换网络
  • 最佳巴士路线,邮政路线,计量检查路线