力扣每日一題 52 N皇后II

2021-10-24 21:34:17 字數 967 閱讀 3263

八皇后問題是個經典的問題,n皇后問題算是八皇后問題的擴充套件,都可以通過回溯方法求解。

資料的儲存方式:

對於乙個nxn的棋盤,最基本的實現方式是使用乙個nxn的矩陣m,若矩陣m[i][j]值為1,則表示在點(i,j)處放置乙個皇后。但是這個實現方式比較耗記憶體。

我們知道,一行內最多只能有乙個皇后,所以可以使用乙個大小為 n 的陣列pos,pos[i]即表示在(i,pos[i])處放置乙個皇后。這樣就能極大的減小記憶體的開銷,同時能更高效的找到已放置皇后的位置。

衝突檢測:

兩個皇后不能在同一行、列,與斜線上,由於使用單個陣列pos儲存,不會產生行衝突,對於列衝突,只需判斷是否有 pos[i]==pos[j] 。比較複雜的是對角線的衝突,如果對角線會產生衝突,則兩個皇后對應兩點連成的直線斜率為1或-1,故可用abs(pos[i]-pos[j]) == i-j (i > j)判斷。

**實現:

class

solution

}return

false;}

// 回溯求解

void

backtrack

(int

& ans, vector<

int>

& pos,

int index,

int n)

for(

inti(0

); i < n;

++i)}}

public

:int

totalnqueens

(int n)

};

執行結果:

Leetcode 每日一題 52 N皇后 II

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

leetcode演算法練習 52 N皇后 II

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

每日一題 力扣 計畫

98 驗證二叉搜尋樹 問題給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 1.節點的左子樹只包含小於當前節點的數。2.節點的右子樹只包含大於當前節點的數。3.所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true示例2 輸入 5 1 4...