N皇后[回溯]

N皇后问题,也是路径问题。经典回溯(DFS)算法

function name(n) {
    const res = []
    let arr = []
    for (let j = 0; j < n; j++) {
        let temp = []
        for (let i = 0; i < n; i++) {
            temp.push('.')

        }
        arr.push(temp)
    }
    backtrack(arr, 0);
    return res;
    function backtrack(board, row) {
        if (row == board.length) {
            const end = board.map(v => [...v])
            res.push(end);
            return;
        }
        let n = board[row].length;
        for (let col = 0; col < n; col++) {
            if (!isValid(board, row, col)) {// 排除不合法的选择
                continue;
            }
            board[row][col] = 'Q';// 做选择
            backtrack(board, row + 1); // 进⼊下⼀层决策树
            board[row][col] = '.';// 取消选择
        }

    }
    function isValid(board, row, col) {
        let n = board.length;
        for (let i = row - 1; i >= 0; i--) {
            if (board[i][col] == 'Q') { return false; }
        }
        for (let i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++) {
            if (board[i][j] == 'Q') return false;
        }
        for (let i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
            if (board[i][j] == 'Q') return false;
        }
        return true;
    }
}


console.log(name(4).length);

留个别人的BFS与DFS的区别链接

https://cuijiahua.com/blog/2018/01/alogrithm_10.html
摘自这老兄说得一句话:BFS 常用于找单一的最短路线,它的特点是 “搜到就是最优解”,而 DFS 用于找所有解的问题,它的空间效率高,而且找到的不一定是最优解,必须记录并完成整个搜索,故一般情况下,深搜需要非常高效的剪枝)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值