0
我想通過定義一個函數,該函數需要一個nxn布爾型數組,並填寫答案來解決n皇后問題(將n皇后放在一個沒有任何兩個皇后互相攻擊的nxn棋盤上)真正的女王應該在哪裏。我得到不正確的答案,但不明白爲什麼遞歸不起作用!N皇后遞歸程序
bool check(bool ** board, int n, int row, int col){
if(row == 0) return true;
for(int r = 0 ; r < row ; ++r){
if(board[r][col]) return false;
int left = max(col - row + r, 0), right = min(col + row - r, n-1);
if(board[r][left] || board[r][right]) return false;
}
return true;
}
bool queen(bool ** board, int n, int level = 0){
for(int col = 0 ; col < n ; ++col){
if(!check(board, n, level, col)) continue;
board[ level ][ col ] = true;
if(level == n-1) return true;
if(queen(board, n, level+1)) return true;
board[ level ][ col ] = false;
}
return false;
}
main()我動態地創建bool **板,並用false填充它,然後調用queen(board,n)。
奇怪的是,它是給出正確的解決方案,除了n = 4,6!
任何幫助,非常感謝!
感謝這實際上現在的作品!但我不明白min max有什麼問題,因爲它們只能確保我不會離開董事會的邊界,並在達到董事會邊緣時執行與條件聲明 –
相同的工作,列:從[1,3]開始,檢查[0,2],然後檢查[0,1]和[0,0]。多數民衆贊成我的意思是不檢查直線... – Turo
這是有道理的,謝謝! –