演算法: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皇后
- LeetCode 52. N皇后 IILeetCode
- N皇后問題(各種優化)優化
- leetcode演算法題解(Java版)-9-N皇后問題LeetCode演算法Java
- 八皇后||演算法演算法
- Leetcode每日一題:52.N-Queens II(N皇后Ⅱ)LeetCode每日一題
- 使用回溯演算法解決N皇后問題以及間隔排列問題演算法
- 【演算法】8皇后問題演算法
- 每日一題之拉低通過率 回溯演算法 leetcode 51 N皇后每日一題演算法LeetCode
- 回溯法(排列樹)解決八(N)皇后問題
- 經典n皇后問題java程式碼實現Java
- 程式碼隨想錄演算法訓練營第三十天 | 51.N 皇后演算法
- 用棧+回溯+非遞迴解決N皇后問題遞迴
- 從八皇后問題到回溯演算法演算法
- 演算法學習回顧-皇后問題演算法
- 國際象棋“皇后”問題的回溯演算法演算法
- Leetcode 通過率最高的困難題 N皇后 II 【回溯解法-剪枝】LeetCode
- 《演算法》系列—大白話聊分治、回溯,手撕八皇后演算法
- 轉:八皇后問題 java實現,演算法兩則Java演算法
- 資料結構和演算法——遞迴-八皇后問題(回溯演算法)資料結構演算法遞迴
- PHP演算法練習二:求n和指定數的絕對差PHP演算法
- 【原創】生成n*n蛇形矩陣的演算法矩陣演算法
- python八皇后Python
- 程式碼隨想錄演算法訓練營第30天 | 332.重新安排行程 、51. N皇后、37. 解數獨演算法行程
- [Java] 藍橋杯ADV-203 演算法提高 8皇后·改Java演算法
- 資料結構與演算法(C#實現)系列---N叉樹(二) (轉)資料結構演算法C#
- O(n^2)的排序演算法排序演算法
- 每天刷個演算法題20160519:回溯法解八皇后演算法
- 洛谷八皇后問題
- C#資料結構與演算法系列(十四):遞迴——八皇后問題(回溯演算法)C#資料結構演算法遞迴
- JavaScript 排序演算法(O log(N)等)JavaScript排序演算法
- (Java) 演算法題:2的N次方Java演算法
- n叉樹vs二叉樹二叉樹
- 回溯演算法 | 追憶那些年曾難倒我們的八皇后問題演算法
- 演算法 1~n中1的次數演算法
- 排序演算法-N個正整數排序排序演算法
- [整] JavaScript m選n組合演算法JavaScript演算法