0

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

4

1 回答 1

0

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

  1. 您在 main 的 for 循环中不断设置visited[i][j]为 0。即使进行了递归调用,这也总是将visited 重置为0。实际上,当您声明两者时visitedboard它们会被初始化为充满 0 的数组。所以你可以摆脱那里的两个 set 语句。此外,由于您重置了数组,因此您的递归函数最终将两个值都设置为 0,然后再次找到它们。”

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

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

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 是 0 0

0 0 0 是 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 个位置后停止。

于 2013-12-02T20:19:42.207 回答