Leetcode题解(7)L51/N-Queens
来源:互联网 发布:钢筋含量 大数据 编辑:程序博客网 时间:2024/06/10 09:17
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..”]
]
解题思路:典型的回溯法,可用递归或非递归解决
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]++; } }};
0 0
- Leetcode题解(7)L51/N-Queens
- LeetCode 题解(104): N-Queens
- LeetCode 题解(105): N-Queens II
- LeetCode 51. N-Queens 题解
- LeetCode 52. N-Queens II 题解(C++)
- LeetCode题解:N-Queens I and II
- LeetCode(51) N-Queens
- N-Queens 题解
- leetcode系列(60)N-Queens, N-Queens II
- LeetCode 51. N-Queens(N皇后)
- 【LeetCode】N-Queens && N-Queens II
- leetcode N-Queens & N-Queens II
- Leetcode: N-Queens && N-Queens II
- 【Leetcode】【python】N-Queens/N-Queens II
- Lintcode33 N-Queens solution 题解
- LeetCode(52) N-Queens II
- LeetCode进阶之路(N-Queens)
- 【Leetcode】51. N-Queens(回溯)
- 关于 Cocos2d-x 中使用 setFrameSize 后 MenuItem 失效
- Git初探
- VS2010中的自动化测试
- python-GUI的几个模块
- [荐]寻找到了成为技术高手的捷径了
- Leetcode题解(7)L51/N-Queens
- 【Eclipse】推荐UML插件Green UML、AmaterasUML
- (1)LinuxI2C驱动--概述
- 什么时候用 assertion(断言)?
- tomcat详解
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
- jstorm 0.9.6.2安装配置
- Java 中的异常处理机制的简单原理和应用?
- java基础复习之五:字符及常用转义字符