LintCode 33 N皇后问题
来源:互联网 发布:淘宝评价手机怎么修改 编辑:程序博客网 时间:2024/05/24 06:36
题目:solveNQueens
要求:
n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。
给定一个整数n,返回所有不同的n皇后问题的解决方案。
每个解决方案包含一个明确的n皇后放置布局,其中“Q”和“.”分别表示一个女王和一个空位置。
样例:
对于4皇后问题存在两种解决的方案:[ [".Q..", // Solution 1 "...Q", "Q...", "..Q."], ["..Q.", // Solution 2 "Q...", "...Q", ".Q.."]]
算法要求:
你能否不使用递归完成?
解题思路:
一行一行的往下弄(相当于放了几个皇后)。将所有当前行可以放置皇后的位置都遍历一次。
算法如下:
int h[1001] = {0}; int n = 4; vector<vector<string> > str; void display() { vector<string> vec; for (int i = 0; i < n; i++) { stringstream in; for (int j = 0; j < n; j++) { if (h[i] == j) { in << "Q"; } else { in << "."; } } string temp = in.str(); vec.push_back(temp); } str.push_back(vec); } void dist(int row) { if (row == n) { display(); return; } for (int i = 0; i < n; i++) { h[row] = i; bool flag = true; for (int j = 0; j < row; j++) { if (h[row] == h[j] || abs(row - j) == abs(h[row] - h[j])) { flag = false; break; } } if (flag) { dist(row + 1); } } } vector<vector<string> > solveNQueens(int n) { this->n = n; str.clear(); memset(h, 0, sizeof(h)); dist(0); return str; }
0 0
- LintCode 33-N皇后问题
- LintCode 33 N皇后问题
- LintCode-N皇后问题
- lintcode- N皇后问题
- LintCode:N皇后问题
- Lintcode n皇后问题
- LintCode N皇后问题
- lintcode-N皇后问题II
- lintcode-N-Queen, N皇后问题
- LintCode: N皇后问题I and II
- LintCode 34 N皇后问题 II
- N*N皇后问题
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- <LeetCode> 题33:N皇后问题
- N皇后问题
- n皇后问题
- N皇后问题
- Linux的TUN/TAP编程
- Git是什么?git给我们管理项目带来了哪些便利
- LightOJ 1214 Large Division
- Java如何制作API文档
- selenium的firefoxdriver启动火狐浏览器加载firebug的设置(补充)
- LintCode 33 N皇后问题
- javaee学习笔记
- linux系统分析工具续-SystemTap和火焰图(Flame Graph)
- GCD Again 唯一分解定理
- 常见语法错误集锦
- Java线程:线程的同步与锁
- 车架号VIN码识别
- get、post区别
- Java设计模式之命令模式