为无限循环搜索空间实现DFS

时间:2016-06-11 22:29:17

标签: algorithm graph depth-first-search

我正在制作一段代码来解决一场数字游戏:

  1. 从一个空的10x10网格开始。
  2. 将1放在随机的方格中。
  3. 按顺序填写块中的数字2-100。
  4. 上,下,左和右对 - 你必须放置3个街区。
  5. 对角线 - 您必须放置2个街区。
  6. 我尝试实施深度优先搜索算法来搜索所有路径以找到(可能的)解决方案。我遇到的问题是,当搜索到达没有更多有效移动和回溯的状态时,我无法将块标记为已访问,因为解决方案将不可避免地使用来自另一条路径的块但是如果我不标记它们当访问时,搜索将循环并重新搜索路径无限次。

    这个问题有什么优雅的解决方案吗?或者我应该研究其他搜索算法以解决问题?任何有关正确方向的提示都将受到高度赞赏。

    示例(前3次移动):

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

2 个答案:

答案 0 :(得分:0)

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

以@PaulHankin来获得答案。

答案 1 :(得分:-1)

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

您可以做的另一件事是使用负数作为访问状态标志。例如,标有“' 5”的位置。没有访问,但标记为' -5'意味着它是一个' 5'但此外它也被访问了。