LeetCode:N-Queens

来源:互联网 发布:大数据基金有哪些 编辑:程序博客网 时间:2024/06/10 22:16

N-Queens




Total Accepted: 55554 Total Submissions: 212496 Difficulty: Hard

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.

For example,
There exist two distinct solutions to the 4-queens puzzle:

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

Subscribe to see which companies asked this question

Hide Tags
 Backtracking
Hide Similar Problems
 (H) N-Queens II










































思路:

N-Queens II中的解做一个转化即可。


c++ code:

class Solution {public:    vector<vector<string>> solveNQueens(int n) {                vector<vector<string>> res;        vector<int> nums(n);        for(int i=0;i<n;i++)            nums[i]=i;                permute(res, nums,0);        return res;    }        // 自定义函数    void permute(vector<vector<string>> &res, vector<int> &nums, int pos) {                int n = nums.size();        if(pos==n) {            if(check(nums)) {                vector<string> ans;                for(int i=0;i<n;i++) {                    string str(n, '.');                    str[nums[i]] = 'Q';                    ans.push_back(str);                }                res.push_back(ans);            }            return;        }        for(int i=pos;i<n;i++) {            swap(nums[pos], nums[i]);            permute(res, nums, pos+1);            swap(nums[i], nums[pos]);        }              }          bool check(vector<int> &nums) {                int n = nums.size();        for(int i = 0;i < n;i++) {            for(int j = i + 1;j < n;j++)                // 判断是否在主、副对角线上                if(i-j == nums[i]-nums[j] || j-i == nums[i]-nums[j])                    return false;        }        return true;    }    };


0 0
原创粉丝点击