【问题标题】:Implementation of DFS for infinitely loopy search space无限循环搜索空间的 DFS 实现
【发布时间】:2016-06-11 22:29:16
【问题描述】:

我目前正在编写一段代码来解决数字游戏:

  1. 从一个 10x10 的空网格开始。
  2. 将 1 放置在随机方块中。
  3. 在积木中依次填写数字 2-100。
  4. 上、下、左、右 - 您必须将数字放在 3 个街区之外。
  5. 对角线 - 您必须将数字放置在 2 个街区之外。

我尝试实现深度优先搜索算法来搜索所有路径以找到(可能的)解决方案。我遇到的问题是,当搜索到达没有更多有效移动和回溯的状态时,我无法将块标记为已访问,因为解决方案将不可避免地使用另一条路径中的该块,但如果我不标记它们访问后,搜索将无限次循环和重新搜索路径。

这个问题有什么优雅的解决方案吗?还是我应该研究其他搜索算法来解决问题?任何指向正确方向的提示将不胜感激。

示例(前 3 步):

. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 1 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 1 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 2 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .

. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 1 . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . 2 . . . .
. . . . . . . . . .
. . . 3 . . . . . .
. . . . . . . . . .

【问题讨论】:

  • 你能举个第4条和第5条规则的例子吗?
  • 是的,当然。很抱歉有点含糊。
  • 您的意思是,在您放置一个号码后,下一个号码正好有 8 个可能的位置?要么向右 3 个位置,要么向左,要么向上,要么向下,或者 2 个位置在左下,或者在右下,或者在左上,或者在右上?假设这 8 个仍然在 10x10 的正方形内。
  • 是的。并假设这 8 个块还没有包含另一个数字。
  • 寻找哈密顿路径的问题是NP完全的,因此没有已知的有效通用解决方案。

标签: algorithm graph depth-first-search


【解决方案1】:

这个问题可以归类为试图找到Hamiltonian Path。寻找哈密顿路径是一个 NP 完全问题,没有已知的有效通解。

感谢@PaulHankin 的回答。

【讨论】:

    【解决方案2】:

    由于访问状态似乎是您的问题陈述,您可以创建另一个相同大小的数组并将访问状态放在那里。

    您可以做的另一件事是使用负数作为已访问状态标志。例如,标记为“5”的位置未被访问,但标记为“-5”的位置表示它是“5”,但另外它已被访问。

    【讨论】:

      猜你喜欢
      • 2021-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多