leetcode51 N皇后 dfs,全排列

2021-10-02 09:02:22 字數 1633 閱讀 3942

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。

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

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

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

示例:

輸入:

4輸出:[[

".q.."

,// 解法 1

"...q"

,"q..."

,"..q."],

["..q."

,// 解法 2

"q..."

,"...q"

,".q.."]]

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

依次在每一行尋找放皇后的位置

class

solution

vector

cur(n, s)

;dfs(0

, cur)

;return res;

}void

dfs(

int pos, vector cur)

for(

int i =

0; i < cnt;

++i));

cur[pos]

[i]=

'q';

dfs(pos +

1, cur)

; position.

pop_back()

; cur[pos]

[i]=

'.';}}

}bool

judge

(int x,

int y)

return

true;}

};

基本思想

借助全排列的思想,在全排列的基礎上增強條件。

class

solution

private

:void

change

(vector<

int> nums,

int s,vector>

&res)

if(j < nums.

size()

)break

;}

vector cur;

if(i == nums.

size()

) cur.

push_back

(t);

} res.

push_back

(cur);}

}for

(int i = s; i < nums.

size()

;++i)

}void

swap

(int

&a,int

&b)}

;

Leetcode 51 N皇后 回溯

題目 51 題意 求解n皇后問題的所有解 思路 回溯,對於每一行必須且只能放置乙個皇后,於是只需要考慮列即可。對於每一行,按列進行迴圈,檢查當前位置是否可以放置皇后,如果可以就把攻擊範圍的方格打上標記。如果row current row,意味著得到了乙個可能的方案,回溯尋找下乙個可能的方案,直到所有...

LeetCode51 N皇后 C語言

結局還是好的 第一次自己寫出這麼快的 怎麼判斷在同一行同一列以及對角線上有沒有別的皇后 我是把乙個皇后和一行繫結,按一次迴圈是找去下一行,也就是說每行的皇后肯定是不衝突的,不可能說有兩個皇后在一行的,所以只用判斷在列和對角線上是不是有別的皇后即可,我是維護了三個陣列分別是列標記陣列 n列一維陣列 如...

LeetCode51N皇后問題 回溯演算法

最暴力的解法就是在棋盤上把所有的位置都遍歷一遍,並判斷當前位置能否放皇后 那麼此題就可以遞迴回溯演算法,用遞迴,首先就要確定遞迴的引數,void getqueens int n,int index,vector row n代表皇后的個數,index表示當前考慮將皇后放到第index行,row i k...