n皇后 dfs解法
来源:互联网 发布:青铜卡尺 知乎 编辑:程序博客网 时间:2024/05/29 13:22
#include <iostream>#include <vector>#include <string>using namespace std;class Solution {private: int **mat; int limit; vector<vector<string>> res; void init(int n){ mat = new int*[n]; for (int i = 0; i < n; ++i){ mat[i] = new int[n]; } for (int i = 0; i < n; ++i){ for (int j = 0; j < n; ++j){ mat[i][j] = 0; } } limit = n; } bool check(int row, int col){ for (int i = 0; i < row; ++i){ if (mat[i][col])//不能同列 return false; for (int j = 0; j < limit; ++j){ if (mat[i][j]){ if (abs(i - row) == abs(j - col))//不能在对角线上 return false; else break; } } } return true; } void dfs(int row){ if (row >= limit){ vector<string> temp; for (int i = 0; i < limit; ++i){ temp.push_back(string(limit, '.')); for (int j = 0; j < limit; ++j){ if (mat[i][j]) temp[i][j] = 'Q'; } } res.push_back(temp); } for (int col = 0; col < limit; ++col){ if (check(row, col)){ mat[row][col] = 1; dfs(row + 1); mat[row][col] = 0; } } }public: vector<vector<string>> solveNQueens(int n) { init(n); dfs(0); return res; }};int main(){ Solution sol; vector<vector<string>> res = sol.solveNQueens(8); for (int i = 0; i < res.size(); ++i){ //vector<string> temp = res[i]; for (int j = 0; j < res[i].size(); ++j){ cout << res[i][j] << endl; } cout << endl; }}
0 0
- n皇后 dfs解法
- hdu 2553 N皇后问题 经典搜索,DFS解法
- N皇后问题解法
- n皇后解法
- 八皇后问题DFS解法
- N皇后问题【DFS】
- n皇后问题(dfs)
- n皇后问题<dfs>
- <DFS> N皇后问题
- N皇后问题<DFS>
- dfs n皇后问题
- 【DFS】N皇后问题
- DFS--N皇后问题
- N皇后问题(DFS)
- N 皇后的递归解法
- N皇后问题回溯解法
- n皇后问题的解法
- 八皇后及N皇后的解法
- Sql 调优 与 OLPT
- spring 拦截器(ProxyFactoryBean,BeanNameAutoProxyCreator)
- iOS-数据持久化(一)
- 【软工6】软件开发小组
- 1004 Let the Balloon Rise
- n皇后 dfs解法
- 操作系统开发之——最简单的Bootsect(可直接在里面加代码)
- codeforces 27E E. Number With The Given Amount Of Divisors(dp+数论)
- [POJ 2236]Wireless Network[并查集]
- 西方人眼中的中国的不同:文明国家、民族的概念 和 国家的属性以及它和社会的关系
- Ubuntu14.04安装后vim不可用的问题
- 网页前端的相关技术整理
- 线程之间的通信-(子线程获得主线程的方式)
- Andorid——自定义Dialog