美文网首页
N皇后 II

N皇后 II

作者: 小白学编程 | 来源:发表于2018-12-07 18:23 被阅读0次

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;
    }
}

相关文章

  • LeetCode 52. N皇后 II(N-Queens II)

    52. N皇后 II N皇后 IIn 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之...

  • 52. N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。N皇后 II上图为...

  • n-queens(n皇后问题)

    n queens ii(n皇后问题-只计数不保存) 问题描述 The n queens puzzle is the...

  • N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后...

  • 2.回溯(二)

    https://leetcode-cn.com/tag/backtracking/ 52. N皇后 II难度困难6...

  • 52.N皇后II

    题目描述: n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图...

  • 52. N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后...

  • 52.N皇后II

    n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给定一个整数n,返回n皇后不...

  • LeetCode - #52 N皇后 II

    前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤...

  • 52. N-Queens II N皇后 ||

    题目链接tag: Hard; question:  The n-queens puzzle is the prob...

网友评论

      本文标题:N皇后 II

      本文链接:https://www.haomeiwen.com/subject/djrxhqtx.html