gpt4 book ai didi

java - 我的 N-Queens 解决方案有什么问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:55 25 4
gpt4 key购买 nike

The puzzle :

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

代码如下:

public class Solution {
public int totalNQueens(int n) {
boolean[][] board = new boolean[n][n];
return totalNQueens(board, 0, n);
}

private int totalNQueens(boolean[][] board, int cur, int n) {
int res = 0;
if(cur == n) {
return 1;
}
for(int i = 0; i < n; i++) {
if(!board[cur][i]) {
boolean[][] subboard = board.clone();
for(int r = cur + 1; r < n; r++) {
subboard[r][i] = true;
}
for(int r = cur + 1, c = i - 1; r < n && c >= 0; r++, c--) {
subboard[r][c] = true;
}
for(int r = cur + 1, c = i + 1; r < n && c < n; r++, c++) {
subboard[r][c] = true;
}
res += totalNQueens(subboard, cur+1, n);
}
}
return res;
}
}

结果:

Input:

4

Output:

0

Expected:

2

我无法弄清楚这段代码有什么问题,所以请提前帮助我,谢谢。

最佳答案

问题出在这一行:

boolean[][] subboard = board.clone();

Java 没有多维数组。所以 board 实际上是 boolean 数组的一维数组。 clone 只克隆顶层数组而不是子数组。所以 board[0] 实际上是与 subboard[0] 相同的对象,并且在那里所做的更改永远不会撤消。

关于java - 我的 N-Queens 解决方案有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34434352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com