藍橋杯練習4
阿新 • • 發佈:2021-01-27
技術標籤:LeetCode
52. N皇后 II
題目描述
n 皇后問題 研究的是如何將 n
個皇后放置在 n×n
的棋盤上,並且使皇后彼此之間不能相互攻擊。
給你一個整數 n
,返回所有不同的 n 皇后問題 不同的解決方案的數量。
示例1:
輸入:n = 4
輸出:2
解釋:如上圖所示,4 皇后問題存在兩個不同的解法。
示例 2:
輸入:n = 1
輸出:1
提示:
- 1 ≤ n ≤ 9 1 \le n \le 9 1≤n≤9
- 皇后彼此不能相互攻擊,也就是說:任何兩個皇后都不能處於同一條橫行、縱行或斜線上。
題解:
參考 N皇后 ,兩題基本一樣,就是統計方案變成統計方案數量。
直接使用 究極優化 版本程式碼,又快又省(打表除外,那是開掛)。
class Solution {
public:
int goal;
void dfs( int row, int diag, int rdiag, int& cnt) {
if ( row == goal ) {
++cnt;
return;
}
int safe = goal & (~(row | diag | rdiag));
int nxt;
while ( safe ) {
nxt = safe & (~safe + 1);
safe ^= nxt;
dfs( row | nxt, (diag | nxt) << 1, (rdiag | nxt) >> 1, cnt );
}
}
int totalNQueens(int n) {
goal = (1 << n) - 1;
int cnt = 0;
dfs( 0, 0, 0, cnt );
return cnt;
}
};
/*
時間:0ms,擊敗:100.00%
記憶體:5.7MB,擊敗:99.39%
*/