解决八个皇后产生一个解决方案

时间:2013-12-02 19:07:13

标签: java n-queens

以下是我尝试解决8皇后问题以打印一个解决方案。 (将8个皇后放在棋盘上,这样他们就不会互相攻击)。但是,这个解决方案只能放置6个皇后。我需要另一个意见,我在哪里犯了一个错误。我在更多的BFS风格而不是回溯中这样做。

1 个答案:

答案 0 :(得分:0)

您的算法似乎在某些时候出现故障。运行后,我发现了以下问题:

  1. 您在main中的for循环中经常将visited[i][j]设置为0。即使进行了递归调用,这也始终将访问重置为0。实际上,当您声明visitedboard时,它们将被启动到满0的数组。所以你可以去除那里的两个set语句。另外,因为你重置了数组,你的递归函数最终将两个值都设置为0,然后再次找到它们。“

  2. 对于调试,在!hasQueen语句中,您应输出board[row][col]坐标,该坐标显示已找到的坐标。在打印出网格之前的最终列表显示2,4和1,6被找到并设置两次。

  3. 输出的实际棋盘最终会找到一个不可能的解决方案:

  4.   

    1 0 0 0 0 0 0 0

         

    0 0 0 0 0 0 1 0

         

    0 0 0 0 1 0 0 0

         

    0 0 1 0 0 0 0 0

         

    0 0 0 X 0 Y 0 0

         

    0 0 0 Y 0 X 0 0

         

    0 0 0 0 0 0 0 1

         

    0 1 0 0 0 0 0 0

    (抱歉,我无法将数字格式化)

    布局X和布局Y都失败了8个皇后规则。

    如果您运行程序时将设置为0注释掉,您将看到它在找到6个位置后停止运行。