領扣刷題 N皇后問題

2021-08-28 23:02:29 字數 874 閱讀 9423

題目描述如下:

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 皇后...