zoukankan      html  css  js  c++  java
  • LeetCode(52) N-Queens II

    题目

    Follow up for N-Queens problem.

    Now, instead outputting board configurations, return the total number of distinct solutions.

    1

    分析

    N皇后问题,同LeetCode 51 N-Queens,只不过,此题要求给出问题的合理解个数,而无需给出具体分布。

    只需在上题的基础上,稍加修改,只计数便可达到要求,此题采用另一种求解N皇后问题的方法:

    用一个一位数组来存放当前皇后的状态。假设数组为int state[n], state[i]表示第 i 行皇后所在的列。那么在新的一行 k 放置一个皇后后:

    1. 判断列是否冲突,只需要看state数组中state[0…k-1] 是否有和state[k]相等;

    2. 判断对角线是否冲突:如果两个皇后在同一对角线,那么|row1-row2| = |column1 - column2|,(row1,column1),(row2,column2)分别为冲突的两个皇后的位置

    此种判别方式,相比上题采用的方法,简单许多。

    AC代码

    class Solution {
    private:
        int ret = 0;
    public:
        int totalNQueens(int n) {
            if (n <= 0)
                return 0;
    
            //存储安置皇后的当前解(存储N皇后所在的列数,初始化为-1)
            vector<int> state(n, -1);
            set_queens(state, 0);
            return ret;
        }
    
        void set_queens(vector<int> &state, int row)
        {
            int n = state.size();
            if (row == n)
            {
                ret++;
                return;
            }
            else{
                for (int col = 0; col < n; col++)
                {
                    if (isValid(state, row, col))
                    {
                        state[row] = col;
                        set_queens(state, row + 1);
                        state[row] = -1;
                    }//if
                }//for
            }
        }
    
        //判断在row行col列位置放一个皇后,是否是合法的状态
        //已经保证了每行一个皇后,只需要判断列是否合法以及对角线是否合法。
        bool isValid(vector<int> &state, int row, int col)
        {
            for (int i = 0; i < row; i++)
            {
                if (state[i] == col || abs(row - i) == abs(col - state[i]))
                    return false;
            }//for
            return true;
        }
    };
    

    GitHub测试程序源码

  • 相关阅读:
    函数function
    文件操作
    手机抓包app在python中使用
    手机app抓包工具,安卓手机adb无线连接
    selenium+options配置文件
    scrapy 执行同个项目多个爬虫
    最简单的???ubuntu 通过crontab定时执行一个程序
    scrapycrawl 爬取笔趣阁小说
    python装饰器见解笔记
    有关于python内置函数exec和eval一些见解笔记
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214828.html
Copyright © 2011-2022 走看看