以下是我尝试解决8皇后问题以打印一个解决方案。 (将8个皇后放在棋盘上,这样他们就不会互相攻击)。但是,这个解决方案只能放置6个皇后。我需要另一个意见,我在哪里犯了一个错误。我在更多的BFS风格而不是回溯中这样做。
答案 0 :(得分:0)
您的算法似乎在某些时候出现故障。运行后,我发现了以下问题:
您在main中的for循环中经常将visited[i][j]
设置为0。即使进行了递归调用,这也始终将访问重置为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 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个位置后停止运行。