【发布时间】:2020-04-05 06:50:28
【问题描述】:
在尝试解决 c++ 中的 n-queens 问题时。我遇到了这个错误,我会得到正确的答案,但是当返回数组指针时,我最终得到的是垃圾数字而不是我的答案。关于这一点的奇怪部分是我使用递归来解决问题,并且只有在使用递归时才会得到垃圾编号(即使它正确地通过了递归)。数组在返回之前是完全正确的。
int* Successor(int board[], int n) {
bool currentlyLegal = isLegalPosition(board, n);
int firstZero = -1;
int templast;
for(int i = 0; i < n; i++) {
if(board[i] == 0) {
firstZero = i;
break;
}
}
if(currentlyLegal) {
if(firstZero != -1) {
for(int i = 1; i < n; i++) {
board[firstZero] = i;
if(isLegalPosition(board, n) && i != lastNum) {
return board;
}
}
lastNum = -1;
board[firstZero - 1] = 0;
Successor(board, n);
} else {
templast = board[n - 1];
for(int i = board[n - 1]; i < n; i++) {
board[n - 1] = i;
if(isLegalPosition(board, n) && i != board[n-1] && i != lastNum) {
return board;
}
}
lastNum = templast;
board[n - 1] = 0;
Successor(board, n);
}
} else {
if(firstZero != -1) {
if(firstZero != 0) {
for(int i = board[firstZero - 1]; i < n; i++) {
board[firstZero - 1] = i;
if(isLegalPosition(board, n) && i != board[firstZero - 1]) {
return board;
}
}
lastNum = -1;
board[firstZero - 1] = 0;
Successor(board, n);
} else {
board[0] = 1;
return board;
}
} else {
templast = board[n - 1];
for(int i = board[n - 1]; i < n; n++) {
board[n - 1] = i;
if(isLegalPosition(board, n) && i != board[n - 1] && i != templast) {
return board;
}
}
lastNum = templast;
board[n - 1] = 0;
Successor(board, n);
}
}
}
【问题讨论】:
标签: c++ arrays return n-queens