标签:
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
思路:
将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; } };
标签:
原文地址:http://blog.csdn.net/itismelzp/article/details/51615060