力扣No 51 N皇后

2022-07-15 18:24:09 字數 1476 閱讀 7188

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。

上圖為 8 皇后問題的一種解法。

給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。

每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 'q' 和 '.' 分別代表了皇后和空位

示例:

輸入:4

輸出:[

[".q..", // 解法 1

"...q",

"q...",

"..q."],

["..q.", // 解法 2

"q...",

"...q",

".q.."]

]解釋: 4 皇后問題存在兩個不同的解法。

皇后彼此不能相互攻擊,也就是說:任何兩個皇后都不能處於同一條橫行、縱行或斜線上。

西洋棋中的皇后可以攻擊一行、一列和斜線範圍內的目標,因此下一行皇后的擺放需要考慮避開上面皇后的攻擊範圍。最終解法需要每一行都要有乙個皇后,可能存在多種解法。這道題可以用回溯的方法來解決,從上往下搜尋可能的解法,如果能到達底層則該解法成功,將其放入輸出列表。如果發現某一行的某個位置與上面衝突,就往右搜尋下乙個;如果整行都找不到合適的解,就遞迴返回上一層再往下搜尋。

//每一行都從左往右搜尋

for (int col = 0; col < chess.length; col++) }}

private

boolean isvalid(char chess, int row, int

col)

}//判斷此位置右上角有沒有皇后

for (int i = row - 1, j = col + 1; i >= 0 && j < chess.length; i--, j++)

}//判斷此位置左上角有沒有皇后

for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--)

}return

true

; }

//把將char轉換為list

private listconstruct(char

chess)

return

path;}}

N 皇后 力扣解題

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。給你乙個整數 n 返回所有不同的 n 皇后問題 的解決方案。每一種解法包含乙個不同的 n 皇后問題 的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 1 輸入 n 4 輸出 q.q q.q.q...

回溯法 力扣51 N 皇后

開闢兩個二陣列queen和attack。queen表示棋盤,queen i j q 則表示當前位置放置皇后,如果queen i j 表示未放置皇后。attack表示皇后攻擊範圍,attack i j 1表示當前位置在皇后攻擊範圍內,attack i j 0表示當前位置不在皇后攻擊範圍內。從第一行開始...

回溯 51 N皇后

思路 皇后彼此不能相互攻擊,也就是說 任何兩個皇后都不能處於同一條橫行 縱行或斜線上,所以固定行進行遞迴,借助輔助資料結構保證列 斜線上不同即可。其中正斜線的座標差相同,反斜線的座標和相等,通過查詢集合裡面是否有值保證其不同。class solution void backtrack vector ...