每日刷題 N皇后

2021-09-27 06:41:12 字數 1057 閱讀 6862

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

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

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

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

示例:

輸入: 4

輸出:[".q…", // 解法 1

「…q」,

「q…」,

「…q.」],

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

「q…」,

「…q」,

「.q…」]

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

方法:dfs + 回溯。

由於 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 和 分別代表了皇后和空位。...