8皇后问题(dfs)

#include<iostream>

using namespace std;

//八皇后问题

//思路:8*8的dfs,求结果个数问题(外加上条件减支即可)

//不用开二维数组

int a[8] = {0};  //a数组用来记录8行中每行皇后的位置,比如a[2]=3就表示第二行的皇后在第三个位置

int sumNum = 0;

void DFS(int i){

    if(i == 8) {    //i表示深度: 遍历了0——7

        sumNum = sumNum + 1; //结果数+1

        return;

    }

    //(i, j) 坐标满足条件

    for(int j = 0; j < 8; j++) {

        bool flag = true;

        // check 选项(剪枝条件)

        for(int k = 0; k < i; k++) {

            if( j == a[k] || i - k == j - a[k] || i - k == a[k] - j ) {

                //不在同一列

                //不在对角线:即横纵坐标差的绝对值不能相同

                flag = false;//减支

            }

        }

        if(flag) {

            a[i] = j;  //记录这一行皇后的位置

            DFS(i + 1);  //深度+1

        }

    }

}

int main() {

    DFS(0);

    cout<<sumNum;

    return 0;

}

posted @ 2020-10-06 16:26  py佐料  阅读(118)  评论(0编辑  收藏  举报