52. N-Queens II

题目描述

52. N-Queens II

回溯法 

这道题与第51题是一样的。51. N-Queens-优快云博客

class Solution {
    int columns;  //从低位到高位起算,第i位为0表示棋盘第i列可以放置皇后,第i位为1表示棋盘第i列不能放置皇后
    //边长为n的棋盘分别有2n-1条正斜线和反斜线。
    int diagnals1;//反斜线(从右上角到左下角)。第i位表示第i条反斜线能否放置皇后
    int diagnals2;//正斜线(从左上角到右下角)。含义同上
    int res = 0;
public:
    int totalNQueens(int n) {
        columns = 0;
        diagnals1 = 0;
        diagnals2 = 0;
        backtrack(n,0);
        return res;
    }

    void backtrack(int n,int row){
        if(row==n)
        {
            res++;
            return;
        }
        for(int col = 0;col <n;col++){
            if(columns &(1<<col))
                continue;
            int diag1 = row+col;
            if(diagnals1 &(1<<diag1))
                continue;
            int diag2 = row-col+(n-1);
            if(diagnals2 &(1<<diag2))
                continue;
            columns |= (1<<col);
            diagnals1 |= (1<<diag1);
            diagnals2 |= (1<<diag2);
            backtrack(n,row+1);
            columns &= (~(1<<col));
            diagnals1 &= (~(1<<diag1));
            diagnals2 &= (~(1<<diag2)); 
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值