这是方法,理想情况下应该通过将Q放在棋盘上来解决八皇后问题,这样它们就不会互相威胁,但我似乎无法阻止它进行无限递归。
public static void solve(int row, int col, int size, char[][] array) {
for (int i = 0; i < size - 2; i++) {
if (isSafe(row, col, size, array)) {
array[i][col] = 'Q';
} else {
if (col < size - 2) {
solve(row, col++, size, array); //changed ++ to +1
}
}
}
}
为清楚起见,这里是包含的&#39; isSafe&#39;方法:
public static boolean isSafe(int row, int col, int size, char[][] array) {
//check column
for (int i = 0; i < size - 1; i++) {
if (array[i][col] == 'Q') {
return false;
}
}
//horizontal
for (int i = size - 1; i >= 0; i--) {
if (array[row][i] == 'Q') {
return false;
}
}
//up diagonal
while (row > 0 && col > 0) {
int x = row;
int y = col;
if (array[row - 1][col - 1] == 'Q') {
return false;
} else {
x--;
y--;
}
}
//down diagonal
while (row < size - 1 && col > 0) {
int x = row;
int y = col;
if (array[row + 1][col - 1] == 'Q') {
return false;
} else {
x++;
y--;
}
}
return true;
}
感谢您对此有所了解 编辑:所以我只是想通过改变&#39; ++&#39;到&#39; + 1&#39;我能够阻止堆栈溢出,但我的方法不像我想要的那样递归,所以仍然存在一个问题
答案 0 :(得分:0)
问题在于solve(row, col++, size, array);
直到解决之后,col才会递增。
您需要使用solve(row, ++col, size, array);