N-Queens
来源:互联网 发布:韩国女团 知乎 编辑:程序博客网 时间:2024/05/14 03:09
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.."]]
没做出来,看了yu的答案写的。不过确实是backtracking的思想: 如果到了符合条件的记录,如果不到,那么尝试每一个可能的子集,如果当前没有问题,那么继续下一个判断
class Solution {public:void fillRes(vector<int>& indices,int n){vector<string> r;for(int i=0; i<n; i++){string s(n,'.');s[indices[i]]='Q';r.push_back(s);}res.push_back(r);}bool isValid(vector<int>& indices, int c){
<span style="white-space:pre"></span>//queen cannot sit on the same col or diagonal or row
for(int i=0; i<c;i++){if(indices[i]==indices[c]|| (abs(indices[i]-indices[c])==c-i))return false;}return true;}void nqueens(vector<int>& indices, int c, int n){if (c==n){
<span style="white-space:pre"></span> //the last one, push to resfillRes(indices,n);return;} // loop each possible one if valid nextfor (int i=0; i<n; i++){indices[c]=i;if(isValid(indices,c))nqueens(indices,c+1,n);}} vector<vector<string> > solveNQueens(int n) { res.clear(); vector<int> indices(n,-1); nqueens(indices,0,n); return res; }private: vector<vector<string> > res;};
0 0
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- N-Queens
- C#知识碎片
- 引用计数(retainCount)
- XMPP系列:二、将XMPP框架导入工程
- 利用递归实现对输入字符串的倒序输出
- Java的native方法
- N-Queens
- linux 安装Tesseract-OCR
- 让你的iOS静态库支持armv7s
- 如果时间停止一秒,Google会如何应对?
- Android中spinner(下拉框)的使用2
- EasyUI DataGrid onBeforeRender 使用记录
- python生成随机数
- 个推与APICloud达成合作,实现企业精准推送
- MongoDb中save与insert区别