生活随笔
收集整理的這篇文章主要介紹了
LeetCode 51 N 皇后
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
n 皇后問題 研究的是如何將 n 個皇后放置在 n×n 的棋盤上,并且使皇后彼此之間不能相互攻擊。給你一個整數 n ,返回所有不同的 n 皇后問題 的解決方案。每一種解法包含一個不同的 n 皇后問題 的棋子放置方案,該方案中
'Q' 和
'.' 分別代表了皇后和空位。
題解
回溯法
代碼
class Solution
{
public
:vector
<vector
<string
>> solveNQueens(int n
) {if (n
==0) return vector
<vector
<string
>>(0);vector
<bool
> colum(n
,false
);vector
<bool
> f1(2*n
,false
); vector
<bool
> f2(2*n
,false
); string
s(n
,'.');vector
<string
> vec(n
,s
);dfs(0,n
,vec
,colum
,f1
,f2
);return res
;}bool
isvalid(int x
,int y
,int n
,vector
<bool
> colum
,vector
<bool
> f1
,vector
<bool
> f2
){if (colum
[y
]||f1
[x
-y
+n
-1]||f2
[x
+y
]) return false
;return true
;}void dfs(int x
,int n
,vector
<string
> vec
,vector
<bool
> colum
,vector
<bool
> f1
,vector
<bool
> f2
){if (x
==n
){res
.push_back(vec
);return ;}for (int y
=0;y
<n
;y
++){if (colum
[y
]||f1
[x
-y
+n
-1]||f2
[x
+y
]) continue;colum
[y
]=true
;f1
[x
-y
+n
-1]=true
;f2
[x
+y
]=true
;vec
[x
][y
]='Q';dfs(x
+1,n
,vec
,colum
,f1
,f2
);colum
[y
]=false
;f1
[x
-y
+n
-1]=false
;f2
[x
+y
]=false
;vec
[x
][y
]='.';}}vector
<vector
<string
>> res
;
};
總結
以上是生活随笔為你收集整理的LeetCode 51 N 皇后的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。