下面是我尝试解决 8 个皇后问题以打印一个解决方案。(将 8 个皇后放在棋盘上,这样它们都不会互相攻击)。然而,这个解决方案只放置了 6 个皇后。我需要另一种意见,说明我在哪里犯了错误。我更多的是采用 BFS 风格而不是回溯。
问问题
193 次
1 回答
0
您的算法似乎在某些时候出现故障。运行后,我发现以下问题:
您在 main 的 for 循环中不断设置
visited[i][j]
为 0。即使进行了递归调用,这也总是将visited 重置为0。实际上,当您声明两者时visited
,board
它们会被初始化为充满 0 的数组。所以你可以摆脱那里的两个 set 语句。此外,由于您重置了数组,因此您的递归函数最终将两个值都设置为 0,然后再次找到它们。”为了调试,在
!hasQueen
语句中,你应该输出board[row][col]
坐标,它显示你已经找到的坐标。打印出网格之前的最终列表显示找到并设置了两次 2,4 和 1,6。输出的实际棋盘最终得到了一个不可能的解决方案:
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 回答