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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后...
    vbuer阅读 2,948评论 0 0
  • n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后...
    vbuer阅读 1,873评论 0 0
  • 问题描述 n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(不同行,不同列,不同对角线)。给定...
    Alfie20阅读 3,741评论 0 0
  • 前几天,闯祸了。照理说这个年纪已经不是闯祸的年纪了,可顽性不改的我愣还是因为看了不该看的文字后内心不平静而一顿酒,...
    李研书柜阅读 1,859评论 0 0
  • 首先明确一个概念,爱好是在兴趣的基础上产生的,兴趣是人认识某种事物或从事某种活动的心理倾向,它包含了两个层面,一个...
    671792b980e5阅读 3,325评论 0 0

友情链接更多精彩内容