每日刷題 N皇后II

2021-09-27 06:41:12 字數 970 閱讀 2116

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為:自己所在的一行、自己所在的一列、以及自己所在的兩個對角線上。

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

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

示例:

輸入: 4

輸出: 2

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

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

「…q」,

「q…」,

「…q.」],

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

「q…」,

「…q」,

「.q…」]

方法:dfs + 回溯。

由於 n皇后 問題中不同的皇后不能放在同一排/列,因此可以轉化為 全排列問題。全排列中元素 temp[i] 為第 i 行的皇后應該放在第 temp[i] 列。

同時,為了減少執行時間,需要使用回溯。再生成排列時,同時檢查當前的排列是否滿足皇后之間是否存在相互攻擊的情況,若存在,則捨棄當前排列,並返回上一層;否則繼續執行。

**:

class

solution

//dfs 生成滿足 n皇后 的排列

void

dfs( vector<

int>

& hash,

int begin, vector<

int>

& temp)

for(

int i =

0; i < hash.

size()

; i++)if

(!hash[i])}

inttotalnqueens

(int n)

};

每日刷題 N皇后

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為 自己所在的一行 自己所在的一列 以及自己所在的兩個對角線上。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問...

Leetcode刷題筆記 N 皇后II

知識點 回溯 題目 n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。...

Leetcode 每日一題 52 N皇后 II

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回 n 皇后不同的解決方案的數量。示例 輸入 4 輸出 2 解釋 4 皇后問題存在如下兩個不同的解法。q 解法 1 q q q.q.解法 2 q q q...