1. 程式人生 > >N皇后問題II

N皇后問題II

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。

求解:給定一個整數 n,返回 n 皇后不同的解決方案的數量。

前面我寫過 n皇后問題演算法,連結如下:

n皇后問題II 的演算法思想和n皇后問題是類似的,但是相對更加簡單,不需要使用複雜的資料結構。可以先閱讀我的其中一篇文章,然後去獨立做另一個,不會做的話在看另一篇找思路,鞏固演算法思想。

示例如下:

輸入: 4
輸出: 2
解釋: 4 皇后問題存在如下兩個不同的解法。
[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q."
, // 解法 2 "Q...", "...Q", ".Q.."] ]

具體演算法如下:

class Solution {

    private int res;
    private boolean[] col;
    private boolean[] dia1;
    private boolean[] dia2;

    public int totalNQueens(int n) {
        if(n < 1)
            return 1;

        col = new boolean[n];
        dia1 = new
boolean[2*n-1]; dia2 = new boolean[2*n-1]; putQueue(n, 0); return res; } // n 皇后問題中,尋找第index行皇后所在位置 private void putQueue(int n, int index){ if(index == n){ res ++; return ; } for(int i=0; i<n; i++) if
( !col[i] && !dia1[i+index] && !dia2[i-index+n-1]){ col[i] = true; dia1[i+index] = true; dia2[i-index+n-1] = true; putQueue(n, index+1); col[i] = false; dia1[i+index] = false; dia2[i-index+n-1] = false; } return ; } }