題目描述如下:
n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。
上圖為 8 皇后問題的一種解法。
給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。
每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中'q'
和'.'
分別代表了皇后和空位。
示例:
輸入: 4
輸出:
[[".q..", // 解法 1
"...q",
"q...",
"..q."],
["..q.", // 解法 2
"q...",
"...q",
".q.."]]
解釋: 4 皇后問題存在兩個不同的解法。
思路分析:
按照規則,兩個皇后不能在同一列,同一行,同乙個對角線上,這個問題可以使用回溯解決,但是需要明白回溯的重點,是每一行的狀態,設pow初值為零,在選定了第一行的皇后'位置之後,我們肯定是要在第二行找乙個合適的位置,把第二個皇后安排上,然後依次下去,直到所有的皇后被安排完畢。所以遞迴的終止條件 就是pow=n(從0開始,到n則前n-1行安排完畢,這是為了結合後面的程式),而選擇條件就是兩個皇后不可以出現在同一列,同一行,同一對角線,由於對角線上的點可以表示為(pow+i,col+i),(pow-i,col+i),(pow+i,col-i),(pow-i,col-i),考慮到我們的安排順序是從上往下,所以下面沒有資料,也就可以忽略,所以可以使用下面的**判斷是否符合條件
bool isok(vector& cur,int row,int col)
};
每日刷題 N皇后
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為 自己所在的一行 自己所在的一列 以及自己所在的兩個對角線上。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問...
牛客網刷題 N皇后問題
n皇后問題是指在n n的棋盤上要擺n個皇后,要求 任何兩個皇后不同行,不同列也不再同一條斜線上,求給乙個整數n,返回n皇后的擺法數。輸入 8輸出 回溯法 要保證n個皇后不同行,不同列,不同斜線,只需要滿足下面3個條件即可 1 n個皇后不同行,通過s1儲存該行上的皇后 2 n個皇后不同左上角如圖斜線方...
每日刷題 N皇后II
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。皇后的攻擊範圍為 自己所在的一行 自己所在的一列 以及自己所在的兩個對角線上。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回 n 皇后不同的解決方案的數量。示例 輸入 4 輸出 2 解釋 4 皇后...