• 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;

    }

    这篇文章,是又一个故事的结束...
    lazy's story is continuing.
  • 相关阅读:
    Dapper使用
    EF5.X Code First表关联与延迟加载
    EF Code First 学习笔记:关系
    Entity Framework
    MVC3+EF4.1学习系列(五)----- EF查找导航属性的几种方式
    QML与C++混合编程
    如何将信号从javascript发射到qml
    qt quick中qml编程语言
    PyQt 5信号与槽的几种高级玩法
    静态编译OpenSSL并整合到Qt
  • 原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/13773731.html
Copyright © 2020-2023  润新知