N皇后问题 - LintCode

描述
n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。

给定一个整数n,返回所有不同的n皇后问题的解决方案。

每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。

样例
对于4皇后问题存在两种解决的方案:

[

[".Q..", // Solution 1

 "...Q",

 "Q...",

 "..Q."],

["..Q.", // Solution 2

 "Q...",

 "...Q",

 ".Q.."]

]

挑战
你能否不使用递归完成?

思路

只能AC 90%。

#ifndef C33_H
#define C33_H
#include
#include
#include
#include
using namespace std;
class Solution {
public:
    /*
    * @param n: The number of queens
    * @return: All distinct solutions
    */
    vector<vector<string>> solveNQueens(int n) {
        // write your code here
        vector<int> nums(n, 0);
        vector<vector<string>> res;
        for (int i = 0; i < n; ++i)
            nums[i] = i;
        do{
            bool flag = true;
            string str(n, '.');
            vector<string> vec(n, str);
            for (int i = 0; i < n - 1; ++i)
            {
                if (!flag)
                    break;
                for (int j = i + 1; j < n; ++j)
                {
                    if (i - j == nums[i] - nums[j] || i - j == nums[j] - nums[i])
                    {
                        flag = false;
                        break;
                    }
                }
            }
            if (flag)
            {
                for (int i = 0; i < n; ++i)
                {
                    vec[i][nums[i]] = 'Q';
                }
                res.push_back(vec);
            }
        } while (next_permutation(nums.begin(), nums.end()));
        return res;
    }
};
#endif

你可能感兴趣的:(LintCode,C++)