N-Queens 题解

来源:互联网 发布:淘宝网秋冬运动套装 编辑:程序博客网 时间:2024/05/29 08:22

题目

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 the n-queens’ placement, where ‘Q’ and ‘.’ both indicate a queen and an empty space respectively.

Difficulty: Hard

分析

跟上一道题 N-Queens II实际上是一模一样的,只是多了一个需要保存解的要求,详细分析见我的上篇博客:N-Queens II 经典问题:8皇后问题 题解
这里直接给出代码:

class Solution {private:    vector<vector<string>> ret;    vector<int> queen;public:    bool CheckPlace(int Checkline, int Checkrow) {        for (int i = 0; i < Checkline; i++) {            if (queen[i] == Checkrow || abs(Checkline - i) == abs(Checkrow - queen[i])) {                return false;            }        }        return true;    }    void PlaceQueen(int Checkline, int n) {        if (Checkline == n) {            vector<string> curr(n, string(n, '.'));            for (int i = 0; i < queen.size(); i++) {                curr[i][queen[i]] = 'Q';            }            ret.push_back(curr);            return;        }        else {            for (int i = 0; i < n; i++) {                if (CheckPlace(Checkline, i)) {                    queen[Checkline] = i;                    PlaceQueen(Checkline + 1, n);                }            }        }    }    vector<vector<string>> solveNQueens(int n) {        queen.resize(n);        PlaceQueen(0, n);        return ret;    }};
0 0