Leetcode题解(7)L51/N-Queens
2015-06-09 14:17
483 查看
L51: N-Queens
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..”]
]
解题思路:典型的回溯法,可用递归或非递归解决
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..”]
]
解题思路:典型的回溯法,可用递归或非递归解决
class Solution { public: bool isAttack(vector<int> queens, int k) { if(k == 0) return false; for (int i=0; i<k; i++) { if(queens[k] == queens[i] || abs(k-i) == abs(queens[k]-queens[i])) return true; } return false; } void showQueens(vector<int> queens, vector<vector<string> >& result){ int n = queens.size(); vector<string> vec(n, string(n,'.')); for(int i = 0; i < n; i++) vec[i][queens[i]] = 'Q'; result.push_back(vec); } vector<vector<string> > solveNQueens(int n) { vector<vector<string> > result; vector<int> queens(n,0); if(n == 1) { vector<string> vec(1, string('Q')); result.push_back(vec); return result; } int i = 0; while(1) { while(i < n) { while(queens[i] == n) { queens[i--] = 0; if(i == -1) return result; queens[i]++; } if(isAttack(queens,i)) queens[i]++; else i++; } showQueens(queens,result); queens[n-1] = 0; i = n-2; queens[i]++; } } };
相关文章推荐
- IOS中UUID存放在不同的地方
- 5.3.1 Unique Binary Sear Trees
- 动态计算UITableViewCell高度详解
- UILabel的属性总结
- Dictionary的TryGetValue方法
- easyui动态表头 && 动态添加tabs
- VBox UUID already exists 问题处理
- 解决类型“System.Web.UI.UpdatePanel”不具有名为“Gridview”的公共属性,
- confluent integrated
- Windows Azure 系列-- Azure Queue的操作
- Win10 Build 10135官方32位镜像下载
- GuozhongCrawler系列教程 (5) TransactionRequest详解
- 优化UITableViewCell高度计算的那些事
- CodeIgniter学习笔记二:CI中的query_builder(AR)、连贯操作
- UITableView优化技巧
- Duilib技巧:背景图片平铺
- Java:String、StringBuffer和StringBuilder的区别
- uiview_animation
- request用法
- 动态计算UITableviewCell高度