LeetCode每日一题 (42) 51. N 皇后3

52. N皇后 II

LeetCode每日一题 (5) 51. N 皇后


在这里插入图片描述
在这里插入图片描述


class Solution {
    
    
public:
    int *X; // 一个一维数组,用来纪录每一层选择的位置;
    int Sum=0; // 纪录n皇后的解的个数
    int N; // 表示n*n的棋盘
    int totalNQueens(int n) {
    
    
        N=n;
        Sum=0;
        X=new int[n+1];
        for(int i=0;i<=n;i++) X[i]=0;

        Choose(1);

        return Sum;
    }

    // 选择第k层皇后的位置
    void Choose(int k){
    
    
        if(k>N){
    
     // 说明完成一次方案
            Sum++;
            return;
        }
        for(int i=1;i<=N;i++){
    
    
            X[k]=i; // 为k层选择一个方案
            if(IsPlace(k)) Choose(k+1); // 本次符合条件,进入下一层的选择
        }
    }

    // 判断k层所选择的位置,是否可行
    bool IsPlace(int k){
    
    
        for(int i=1;i<k;i++){
    
     // 这里i<k,只需要比较判断k层与k层以下的每一层;
            // 1. abs(X[k]-X[i])==abs(k-i) 判断两个点在同一斜线
            // 2. (X[i]==X[k] 判断两个点在同一竖排
            if(abs(X[k]-X[i])==abs(k-i) || (X[i]==X[k])) return false;
        }
        return true;
    }

};

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_45021180/article/details/109139054