欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LintCode 34. N皇后问题 II JavaScript算法

程序员文章站 2022-07-15 17:06:37
...

描述

根据n皇后问题,现在返回n皇后不同的解决方案的数量而不是具体的放置布局。

样例

-1:

输入: n=1
输出: 1
解释:
1:
1

-2:

输入: n=4
输出: 2
解释:
1:
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0
2:
0 1 0 0 
0 0 0 1
1 0 0 0
0 0 1 0

解析

采用了lintcode上华助教的方法,dfs暴力搜索
N皇后属于算法经典问题了
可以在leetcode上找到很多解法
有兴趣的话可以搜索看看

const totalNQueens = function (n) {
    var cols, sum;
    function canPut(row, col) {
        var i;
        for (i = 0; i < row; i++) {
            if (cols[i] - i === col - row) {
                return false;
            }
            if (cols[i] + i === col + row) {
                return false;
            }
            if (cols[i] === col) {
                return false;
            }
        }
        return true;
    }
    function dfs(n, k) {
        var i;
        if (k === n) {
            sum++;
            return;
        }
        for (i = 0; i < n; i++) {
            if (!canPut(k, i)) {
                continue;
            }
            cols[k] = i;
            dfs(n, k + 1);
        }
    }
    cols = new Array(n);
    sum = 0;
    dfs(n, 0);
    return sum;
}

运行结果

LintCode 34. N皇后问题 II JavaScript算法