八皇后問題是個經典的問題,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...