1. 程式人生 > 其它 >藍橋杯練習4

藍橋杯練習4

技術標籤: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 1n9
  • 皇后彼此不能相互攻擊,也就是說:任何兩個皇后都不能處於同一條橫行、縱行或斜線上。

題解:

參考 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% */