回溯法 力扣51 N 皇后

2021-10-11 09:48:05 字數 913 閱讀 5130

開闢兩個二陣列queen和attack。

queen表示棋盤,queen[i][j]=『q』則表示當前位置放置皇后,如果queen[i][j]=『.』表示未放置皇后。

attack表示皇后攻擊範圍,attack[i][j]=1表示當前位置在皇后攻擊範圍內,attack[i][j]=0表示當前位置不在皇后攻擊範圍內。

從第一行開始嘗試放置皇后,如果當前格仔不在攻擊範圍內,則放置並且在attack上設定攻擊範圍,否則嘗試下乙個位置,

如果任意一行8個位置都無法放置皇后則返回,回溯。如果8行都嘗試完畢,則結束遞迴,記錄當前的方案。

class

solution

;//列舉8個方向

int dy=

; attack[x]

[y]=1;

//注意這裡攻擊範圍設定的技巧

for(

int i =

1; i

)//從1延伸到n-1的距離

for(

int j =

0; j <

8; j++)}

void

backtrack

(int k,

int n,vector

int>>

&attack, vectorqueen, vector>

& solve)

else}}

}vector>

solvenqueens

(int n)

backtrack(0

, n, attack, queen, solve)

;return solve;}}

;

回溯 51 N皇后

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

51 N 皇后(回溯演算法)

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

Leetcode刷題筆記 51 N 皇后

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