演算法:N皇后二
題目:
leetcode 52題。
在 n×n 的國際象棋棋盤上,放置n個皇后。有幾種方法,可以使得n個皇后不能互相攻擊。
在國際象棋中,皇后可以如圖的4個方向。
解法:
回溯法。
遍歷n,
定義一個行的陣列 columns,用於儲存已有皇后的行
定義一個左斜線的陣列 left_line,用於儲存已有皇后的左斜線
定義一個右斜線的陣列 right_line,用於儲存已有皇后的右斜線
對於一列中的每一個數值i,判斷i的行,左斜線,右斜線是否已存在上述3個陣列中。
如果存在,則繼續。
否則,將其存入對應的陣列。
直到遍歷完所有的列。
此時,返回1.
遞迴判斷所有的行。
程式碼
class Solution {
Set<Integer> columns = new HashSet<Integer>(); // 列
Set<Integer> left_line = new HashSet<Integer>(); // 左斜線
Set<Integer> right_line = new HashSet<Integer>();// 右斜線
public int totalNQueens(int n) {
int res = backtrack(n,0);
return res;
}
public int backtrack(int n,int row) {
if (row==n) {
return 1;
} else {
int count=0;
for (int i = 0; i < n; i++) {
if (columns.contains(i))
continue;
if (left_line.contains(row - i))
continue;
if (right_line.contains(row + i))
continue;
columns.add(i);
left_line.add(row - i);
right_line.add(row + i);
count += backtrack(n, row + 1);
columns.remove(i);
left_line.remove(row - i);
right_line.remove(row + i);
}
return count;
}
}
}
相關文章
- N皇后和N皇后2
- N 皇后
- 51,N皇后
- N皇后問題
- 7-22 n queens (10分) 八皇后(n皇后)問題
- 藍橋杯-N皇后
- 20241201: 51. N 皇后
- 52. N皇后 II
- LeetCode 52. N皇后 IILeetCode
- leetcode演算法題解(Java版)-9-N皇后問題LeetCode演算法Java
- HDU - 2553 N皇后問題(DFS)
- Leetcode每日一題:52.N-Queens II(N皇后Ⅱ)LeetCode每日一題
- 2020-11-18 N皇后問題
- N皇后問題(各種優化)優化
- 八皇后||演算法演算法
- 每日一題之拉低通過率 回溯演算法 leetcode 51 N皇后每日一題演算法LeetCode
- 回溯法(排列樹)解決八(N)皇后問題
- 程式碼隨想錄演算法訓練營第三十天 | 51.N 皇后演算法
- n皇后問題--回溯法,以DFS的方式搜尋
- [Hdfs] lc52. N皇后 II(dfs方案數+經典)
- 演算法學習回顧-皇后問題演算法
- 從八皇后問題到回溯演算法演算法
- Leetcode 通過率最高的困難題 N皇后 II 【回溯解法-剪枝】LeetCode
- YCOJN皇后
- 《演算法》系列—大白話聊分治、回溯,手撕八皇后演算法
- 【一天一大 lee】N皇后 II (難度:困難) - Day20201017
- PHP演算法練習二:求n和指定數的絕對差PHP演算法
- 資料結構和演算法——遞迴-八皇后問題(回溯演算法)資料結構演算法遞迴
- python八皇后Python
- [Java] 藍橋杯ADV-203 演算法提高 8皇后·改Java演算法
- 程式碼隨想錄演算法訓練營第30天 | 332.重新安排行程 、51. N皇后、37. 解數獨演算法行程
- 棋盤 K皇后
- JavaScript 排序演算法(O log(N)等)JavaScript排序演算法
- (Java) 演算法題:2的N次方Java演算法
- n叉樹vs二叉樹二叉樹
- 1N5819-ASEMI軸向肖特基二極體1N5819
- C#資料結構與演算法系列(十四):遞迴——八皇后問題(回溯演算法)C#資料結構演算法遞迴
- 演算法 1~n中1的次數演算法