回溯 51 N皇后

2021-10-11 01:51:52 字數 991 閱讀 1233

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

class solution 

void backtrack(vector> &solutions, vector&queens, int n, int row, unordered_set&columns, unordered_set&diagonals1, unordered_set&diagonals2) else

int diagonal1 = row - i;

if (diagonals1.find(diagonal1) != diagonals1.end())

int diagonal2 = row + i;

if (diagonals2.find(diagonal2) != diagonals2.end())

queens[row] = i;

columns.insert(i);

diagonals1.insert(diagonal1);

diagonals2.insert(diagonal2);

backtrack(solutions, queens, n, row + 1, columns, diagonals1, diagonals2);

queens[row] = -1;

columns.erase(i);

diagonals1.erase(diagonal1);

diagonals2.erase(diagonal2);}}

}vectorgenerateboard(vector&queens, int n)

return board;}};

51 N 皇后(回溯演算法)

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

回溯法 力扣51 N 皇后

開闢兩個二陣列queen和attack。queen表示棋盤,queen i j q 則表示當前位置放置皇后,如果queen i j 表示未放置皇后。attack表示皇后攻擊範圍,attack i j 1表示當前位置在皇后攻擊範圍內,attack i j 0表示當前位置不在皇后攻擊範圍內。從第一行開始...

Leetcode刷題筆記 51 N 皇后

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