N皇后 II

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

image

<small style="box-sizing: border-box; font-size: 12px;">上圖為 8 皇后問題的一種解法。</small>

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

示例:

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

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

 class Solution {
    static int count = 0;

    
    public int totalNQueens(int n) {
        if (n == 1) {
            return 1;
        }

        if (n == 2 || n == 3) {
            return 0;
        }



        int[][] q = new int[n][n];
        System.out.println (count);
        
        return total(q, 0, 0);


    }

    public int total(int[][] q, int x, int y) {

        if (x == q.length) {
            count++;
            // for (int i=0;i<q.length;i++) {
            //     System.out.println ( Arrays.toString (q[i]));
            // }


            return 1;

        }

        int res = 0;

        for (int col = 0; col < q.length; col++) {
            if (vaild(q, x, col)) {
                q[x][col] = 1;
                res += total(q, x + 1, col);
                q[x][col] = 0;
            }
        }
        return res;

//      if (vaild(q, x, y)) {

//          q[x][y] = 1;
//          for (int col = 0; col < q.length; col++) {
//              total(q, x + 1, col);
//          }
//             q[x][y] = 0;

//      }

    }

    public boolean vaild(int[][] q, int x, int y) {
        for (int r = 0; r <= x; r++) {
            if (q[r][y] == 1) {
                return false;
            }
        }

        for (int i = 1; i <= x ; i++) {
            if (x - i >= 0 && y + i < q.length) {
                if (q[x - i][y + i] == 1) {
                    return false;
                }
            }

        }

        for (int i = 1; i <= x && i <= y; i++) {
            if (q[x - i][y - i] == 1) {
                return false;
            }
        }
        return true;
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,并且使皇后彼此之間不能相互攻擊。 上圖為 8 皇后...
    vbuer閱讀 392評論 0 0
  • n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,并且使皇后彼此之間不能相互攻擊。 上圖為 8 皇后...
    vbuer閱讀 276評論 0 0
  • 問題描述 n皇后問題是將n個皇后放置在n*n的棋盤上,皇后彼此之間不能相互攻擊(不同行,不同列,不同對角線)。給定...
    Alfie20閱讀 629評論 0 0
  • 前幾天,闖禍了。照理說這個年紀已經不是闖禍的年紀了,可頑性不改的我愣還是因為看了不該看的文字后內心不平靜而一頓酒,...
    李研書柜閱讀 283評論 0 0
  • 首先明確一個概念,愛好是在興趣的基礎上產生的,興趣是人認識某種事物或從事某種活動的心理傾向,它包含了兩個層面,一個...
    671792b980e5閱讀 476評論 0 0