【LeetCode051】N皇后问题,回溯法,加上一个栈维护结果
2016-05-13 12:11
471 查看
同【LeetCode052】
只是要具体的结果,那么只需多用一个全局的栈来存结果,每次找到一个,添加到结果队列ansList里即可
注意,vector<vector<string> > ansList;
>>之间要有一个空格,不然两个>会被认为是>>,会报错
AC代码
只是要具体的结果,那么只需多用一个全局的栈来存结果,每次找到一个,添加到结果队列ansList里即可
注意,vector<vector<string> > ansList;
>>之间要有一个空格,不然两个>会被认为是>>,会报错
AC代码
#include<stdio.h> #include<string> #include<vector> #include<iostream> using namespace std; int col[101]; int x1[202]; int x2[202]; int ans = 0; int ansStack[101]; int top = 0; vector<vector<string> > ansList; class Solution { public: vector<vector<string> > solveNQueens(int n) { ans = 0; top = 0; ansList.clear(); memset(col, 0, sizeof(col)); memset(x1, 0, sizeof(x1)); memset(x2, 0, sizeof(x2)); solve(0, n); // printf("%d\n", ans); return ansList; } void solve(int ri, int n) { if (ri == n) { vector<string> oneAns; for (int i = 0 ; i < n; i++) { string str = ""; for (int j = 0; j < n; j++) { if (j == ansStack[i]) { str += "Q"; } else { str += "."; } } oneAns.push_back(str); } ansList.push_back(oneAns); ans++; return; } int ci; for (ci = 0; ci < n; ci++) { if (col[ci] || x1[ri + ci] || x2[ri + n - 1 - ci]) continue; col[ci] = 1; x1[ri + ci] = 1; x2[ri + n - 1 - ci] = 1; ansStack[top++] = ci; solve(ri + 1, n); top--; col[ci] = 0; x1[ri + ci] = 0; x2[ri + n - 1 - ci] = 0; } } }; int main() { Solution s; ansList = s.solveNQueens(4); for (int i = 0; i < ansList.size(); i++) { for (int j = 0; j < ansList[i].size(); j++){ cout << ansList[i][j] << endl; } } return 0; }
相关文章推荐
- 简述Linux IO调度的算法
- 简述Linux IO调度的算法
- Nginx 限制连接数与请求数
- CentOS6.X 搭建iRedMail邮件服务器详解
- 关于“幽灵架构”的总结:适用场景与方法重载
- JAVA三次层架构和MVC
- Linux下脚本yifei.py权限rx的分析总结
- 新手建网站的步骤及注意事项
- centos IP配置
- arm-linux-gcc 环境变量设置
- linux常用命令
- linux下ffmpeg库 ARM交叉编译
- 1.imread函数 首先,我们看imread函数,可以在OpenCV官方文档中查到其原型如下: Mat imread(const string& filename, int flags=1
- copy项目后修改项目的部署名称
- Nginx源码分析 ——Nginx的进程模型
- tomcat中war启动顺序
- iptables详解
- 记录使用intellig idea遇到的问题
- Centos6.5 安装 RabbitMQ3.6.1
- 【POP动画引擎教程 01】实现图片折叠效果