zoukankan      html  css  js  c++  java
  • 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.
  • 相关阅读:
    python语法小应用---列表和元组
    初识numpy
    PageRank算法
    安装最新版的2016版Pycharm后,激活码
    Python中的一些小语法
    卷积神经网络Convolutional Neural Networks
    如何选取一个神经网络中的超参数hyper-parameters
    初识神经网络NeuralNetworks
    VMware环境和Window环境进行网络连接的问题
    C语言标准
  • 原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/13773731.html
Copyright © 2011-2022 走看看