leetcode專題訓練 51 N Queens

2021-09-27 02:34:11 字數 1212 閱讀 9875

n皇后問題,用回溯法就可以解決。如果當前位置可以擺放,就將當前位置設定為』q』並嘗試在下一行擺放,在嘗試完這種情況後,再將當前位置重新設定維』.』,如果當前位置不可以拜訪,就判斷下個位置能否擺放。而判斷能否擺放主要有4個約束,乙個是不在同一行,乙個是不在同一列,兩個是不在同一條斜線。所以本方法中用陣列儲存了每行、每列、每斜線是否被擺放過。需要注意的是,在同乙個斜線的位置的座標要麼相加為同一值,要麼相差為同一值,可以用這兩個判斷方式來判斷當前位置所在斜線。

import copy

class

solution

:def

solvenqueens

(self, n:

int)

-> list[list[

str]]:

if n ==1:

return[[

'q']

]def

backtrack

(now =0)

:if now == n:

re =

for i in

range

(n):

"".join(tmp[i]))

)return

for i in

range

(n):

if col[i]

or h[now+i]

or s[now-i+n-1]

:continue

col[i]=1

h[now+i]=1

s[now-i+n-1]

=1tmp[now]

[i]=

'q' backtrack(now+1)

col[i]=0

h[now+i]=0

s[now-i+n-1]

=0tmp[now]

[i]=

'.'

tmp =[[

'.'for i in

range

(n)]

for i in

range

(n)]

col =[0

]*nh =[0

]*(n*2-1

) s =[0

]*(n*2-1

) output =

backtrack(

)return output

Leetcode刷題筆記 51 N 皇后

知識點 回溯 題目 n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。...

回溯 51 N皇后

思路 皇后彼此不能相互攻擊,也就是說 任何兩個皇后都不能處於同一條橫行 縱行或斜線上,所以固定行進行遞迴,借助輔助資料結構保證列 斜線上不同即可。其中正斜線的座標差相同,反斜線的座標和相等,通過查詢集合裡面是否有值保證其不同。class solution void backtrack vector ...

51 N 皇后(回溯演算法)

n 皇后問題 研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。給你乙個整數 n 返回所有不同的 n 皇后問題 的解決方案。每一種解法包含乙個不同的 n 皇后問題 的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。我們先來簡化一下題目 棋盤中皇后可以攻擊同一行...