51. N-Queens
来源:互联网 发布:如何正确对待人工智能 编辑:程序博客网 时间:2024/06/05 09:14
经典的回溯方法。
想方法不难,但是注意isValid函数,一开始我的做法是一行一列两个斜线都判断是否有冲突的Q,但是超时了,看了别人的代码才发现,只需要算这个位置上面的位置,这个位置与左上角的斜线,这个位置和右上角的斜线是否有冲突的就行了。这一行下面的都还没有遍历到,当然不会有冲突的Q。还有push_back到res之后要return,不要忘了写。
class Solution {public: vector<vector<string>> solveNQueens(int n) { vector<vector<string>> res; vector<string> v(n, string(n, '.')); helper(res, v, n, 0); return res; } void helper(vector<vector<string>>& res, vector<string>& v, int n, int i){ if(i >= n) { res.push_back(v); return; } for(int j = 0; j < n; ++j){ v[i][j] = 'Q'; if(isValid(v, n, i, j) == true){ helper(res, v, n, i+1); } v[i][j] = '.'; } } bool isValid(vector<string>& v, int n, int row, int col){ //check if the column had a queen before. for (int i = 0; i != row; ++i) if (v[i][col] == 'Q') return false; //check if the 45° diagonal had a queen before. for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; --i, --j) if (v[i][j] == 'Q') return false; //check if the 135° diagonal had a queen before. for (int i = row - 1, j = col + 1; i >= 0 && j < n; --i, ++j) if (v[i][j] == 'Q') return false; return true; }};
阅读全文
0 0
- 51. N-Queens && 52. N-Queens II
- 51. N-Queens/52. N-Queens II
- LeetCode 51. N-Queens
- LeetCode --- 51. N-Queens
- LeetCode 51.N-Queens
- [Leetcode] 51. N-Queens
- 51.N-Queens
- [leetcode] 51.N-Queens
- 51. N-Queens
- [leetcode] 51. N-Queens
- LeetCode 51. N-Queens
- 51. N-Queens
- leetcode 51. N-Queens
- 【LeetCode】51. N-Queens
- leetcode 51. N-Queens
- LeetCode 51. N-Queens
- 51. N-Queens
- LeetCode 51. N-Queens
- 机器学习常用数学公式
- 从iOS 10设计指南变化看设计的新趋势
- 基于Zookeeper的分布式锁
- 7 场不可错过的 AI 技术专题 | 本周直播
- linux下安装memcache
- 51. N-Queens
- SAP PI 7.5 官方文档---part1
- python:13:第三方库的安装
- 利用mybatis-generator自动生成代码
- 全民聚焦电信诈骗防治《烧脑24小时》还原真实电信诈骗
- “高产”魅族再出新机:魅蓝MAX对标小米MAX
- 通过socket进行TCP通信丢包原因总结
- 租用游艇问题
- listview和checkbox点击事件冲突解决