class
solution
// 引數:路徑,選擇列表
public
void
backtrack
(int
board,
int row)
int n = board[row]
.length;
// 本行的列數
for(
int col =
0; col < n; col++
) board[row]
[col]=1
;backtrack
(board,row+1)
; board[row]
[col]=0
;}}// 皇后能攻擊的情況:判斷當前位置正上方,左上和右上有無棋子。
// 是否可以在board[row][col] 放置棋子?
public
boolean
canattack
(int
board,
int row,
int col)
}// 左上方
for(
int i = row-
1,j = col-
1; i >=
0&&j>=
0; i--
,j--)}
// 右上方
for(
int i = row-
1,j = col+
1; i>=
0&& j,j++)}
return
true;}
}
回溯 n皇后問題
思想 用回溯方法求解,首先要分析問題的求解空間。可用一棵n叉樹表示這個問題的求解空間,在回溯遍歷這個課二叉樹的過程中形成合理的解。對於這棵n叉樹,列序號i 0 n 1 是它的孩子,而每個孩子都有深度為n的子樹 包括自身 這些子樹的層次是n個皇后 也代表每個皇后的行序號,因為不同的皇后肯定不在同一行 ...
n皇后問題(回溯)
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...
回溯 N皇后問題
會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...