n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為:自己所在的一行、自己所在的一列、以及自己所在的兩個對角線上。
上圖為 8 皇后問題的一種解法。
給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。
每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 『q』 和 『.』 分別代表了皇后和空位。
示例:
輸入: 4方法:dfs + 回溯。輸出:[".q…", // 解法 1
「…q」,
「q…」,
「…q.」],
["…q.", // 解法 2
「q…」,
「…q」,
「.q…」]
解釋: 4 皇后問題存在兩個不同的解法。
由於 n皇后 問題中不同的皇后不能放在同一排/列,因此可以轉化為 全排列問題。全排列中元素 temp[i] 為第 i 行的皇后應該放在第 temp[i] 列。
同時,為了減少執行時間,需要使用回溯。再生成排列時,同時檢查當前的排列是否滿足皇后之間是否存在相互攻擊的情況,若存在,則捨棄當前排列,並返回上一層;否則繼續執行。
**:
class
solution
//dfs 生成滿足 n皇后 的排列
void
dfs( vector<
int>
& hash,
int begin, vector<
int>
& temp, vector
& record)
for(
int i =
0; i < hash.
size()
; i++)if
(!hash[i])}
vector>
solvenqueens
(int n)
};
每日刷題 N皇后II
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為 自己所在的一行 自己所在的一列 以及自己所在的兩個對角線上。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回 n 皇后不同的解決方案的數量。示例 輸入 4 輸出 2 解釋 4 皇后...
領扣刷題 N皇后問題
題目描述如下 n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 ...
Leetcode刷題筆記 N 皇后II
知識點 回溯 題目 n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。...