leetcode---N-Queens---回溯
2016-05-27 10:16
330 查看
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..”]
]
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..”]
]
class Solution { public: vector<vector<string>> ans; bool ok(int depth, int col, int n, vector<string> &tmp) { int sum = col + depth; int c = 0; for(int i=0; i<depth; i++) { c = depth - i; if(tmp[i][col] == 'Q' || tmp[i][sum-i] == 'Q' || tmp[i][col-c] == 'Q') return false; } return true; } void dfs(int depth, vector<string> &tmp, int n) { if(depth >= n) { ans.push_back(tmp); return; } for(int j=0; j<n; j++) { tmp[depth][j] = 'Q'; if(ok(depth, j, n, tmp)) dfs(depth+1, tmp, n); tmp[depth][j] = '.'; } } vector<vector<string>> solveNQueens(int n) { vector<string> tmp; for(int i=0; i<n; i++) { string s = ""; for(int j=0; j<n; j++) s += '.'; tmp.push_back(s); } dfs(0, tmp, n); return ans; } };
相关文章推荐
- CALayer的那些事(一)
- Keil 汇编编译问题 error C5: 'asm/endasm' requires src-control to be active
- mosquitto install with ssl
- 【性能为王】从PHP源码剖析array_keys和array_unique
- IAR 中 Compile、Make、Build 的区别
- Android中ContentValues用法
- csuoj-1733-XueXX and Chessboard
- csuoj-1732-XueXX and Binary
- MQTT Mosquitto broker with SSL/TLS transport security
- Errors running builder 'DeploymentBuilder' on project '工程名'
- csuoj-1731-XueXX and P-P String
- getRequestDispatcher()与sendRedirect()的区别
- 关于UIFont的初始化
- android项目编译报错:error occurred during the build
- ScrollView与UIPageController
- iOS 8UIAlertcontroller如何实现 message左对齐 ,title居中显示
- Minigui-3.0.12 开发记录
- primary key与unique的区别
- iOS中的UIStepper数值加减器用法指南
- iOS开发之高级视图—— UICollectionViewController