Leetcode 51. N皇后

class Solution {
public:
    //最后返回的结果
    vector<vector<string>> ans;

    // 记录路径的信息,path的索引表示的第几列,因此对应的值就是第几行,这样才可以确定一个唯一的二维坐标
    vector<int> path;

    // 标志记录信息
    vector<bool> row;
    vector<bool>  diagonal ;
    vector<bool>  back_diagonal ;

    // idx表示现在走的是那一列,n表示总共多少列
    void dfs(int idx, int n)
    {
        //递归的终止条件
        if(idx >= n)
        {
            vector<string> chess;
            //有n行
            for(int i=0;i<n;++i)
            {
                string tmp  = "";
                //有n列
                for(int j=0;j<n;++j)
                {
                    if(path[j] == i)
                    {
                        tmp += "Q";
                    }
                    else
                    {
                        tmp += ".";
                    }
                }
                chess.push_back(tmp);
            }
            ans.push_back(chess);
            return;
        }

        //idx表示当前走的是第几列  递归的主要部分
        for(int i=0;i<n;++i)
        {
            if(!row[i] && !diagonal[idx+i] && !back_diagonal[idx-i + n-1])
            {
                path[idx] = i;
                //第i行被占据了
                row[i] = true;
                diagonal[idx+i] = true;
                back_diagonal[idx-i + n-1] =  true;
                dfs(idx+1, n);
                row[i] = false;
                diagonal[idx+i] = false;
                back_diagonal[idx-i + n-1] =  false;
            }
        }
    }

    vector<vector<string>> solveNQueens(int n) {
        ans.clear();

        path.resize(n,-1);
        row.resize(n, false);
        diagonal.resize((2*n-1), false);
        back_diagonal.resize((2*n-1), false);

        dfs(0, n);

        return ans;
    }
};

原文地址:https://www.cnblogs.com/randyniu/p/9219984.html

时间: 2024-10-09 21:36:48

Leetcode 51. N皇后的相关文章

[leetcode]51. N-QueensN皇后

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. Each solution contains a distinct board configuration of

leetcode| 51. N皇后问题

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回 n 皇后不同的解. 示例: 输入: 4 解释: 4 皇后问题存在如下两个不同的解法. [ ?[".Q..", ?// 解法 1 ? "...Q", ? "Q...", ? "..Q."], ?["..Q.", ?// 解法 2 ? "Q...&

[LeetCode系列]N皇后问题递归解法 -- 位操作方式

N皇后问题: 给定8*8棋盘, 放置n个皇后, 使其互相不能攻击(即2个皇后不能放在同一行/列/正反对角线上), 求解共有多少种放置方式? 这个问题的解答网上有不少, 但是位操作解法的我看到的不多. 下面贴出代码和图解, 也就不赘述了. 1 class Solution { 2 public: 3 /* 使用位操作实现的回溯算法. 按行扫描, 检测可以放置的列. 4 * 'limit' - 都是 '1'. 代表着所有列都被占据了 5 * 'h' - 是目前所有皇后列在行上的垂直投影. 如果 h=

leetcode之n皇后问题

leetcode上有两个关于n皇后的问题,两个题目基本是一样的,只是第二个是把所有的排法求出来.n皇后最简单的就是用递归,每次判断一行的一个位置,如果合法,就判断下一行,不合法再判断下一个位置 N-Queens II Follow up for N-Queens problem. Now, instead outputting board configurations, return the total number of distinct solutions. class Solution {

leetCode 51. N-Queens | 回溯问题(N皇后问题) | hard

51. N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. Each solution contains a distinct board conf

leetCode 51.N-Queens (n皇后问题) 解题思路和方法

N-Queens The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. Each solution contains a distinct board configur

[LeetCode 51&amp;52] N-Queens I &amp; II (N皇后问题)

题目链接:n-queens import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all dist

LeetCode 51 N-Queens II

Follow up for N-Queens problem. Now, instead outputting board configurations, return the total number of distinct solutions. 思路1:打表 public class Solution { public int totalNQueens(int n) { int[] result = new int[] { 0, 1, 0, 0, 2, 10, 4, 40, 92, 352,

[LeetCode]N-Queens 八皇后问题扩展(经典深搜)

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. Each solution contains a distinct board configuration of