[leetcode] 51. N-Queens (递归)
2024-09-01 05:15:59
递归,经典的八皇后问题。
利用一位数组存储棋盘状态,索引表示行,值为-1表示空,否则表示列数。
对行进行搜索,对每一行的不同列数进行判断,如果可以摆放符合规则,则摆放,同时遍历下一行。
遍历过程中,若已经遍历了n行,则保存该状态。
Runtime: 4 ms, faster than 91.35% of C++ online submissions for N-Queens.
class Solution
{
public:
vector<vector<string>> res;
vector<int> queen;
int N;
vector<vector<string>> solveNQueens(int n)
{
queen = vector<int>(n, -);
N = n;
helper();
return res;
}
void helper(int pi)
{
if (pi == N)
{
pushit();
return;
} for (int j = ; j < N; j++)
{
if (valid(pi, j))
{
queen[pi] = j;
helper(pi + );
queen[pi] = -;
}
}
}
bool valid(int pi, int pj)
{
for (int i = ; i <= pi; i++)
{
if (queen[i] == pj || abs(queen[i] - pj) == pi - i)
return false;
}
return true;
}
void pushit()
{
vector<string> temp;
for (int i = ; i < N; i++)
{
string str;
for (int j = ; j < N; j++)
str.push_back('.');
str[queen[i]] = 'Q';
temp.push_back(str);
}
res.push_back(temp);
}
};
最新文章
- freeswitch
- (转)js闭包初入门
- iOS UIKit:CollectionView之设计 (1)
- 用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
- GCD系列 之(二): 多核心的性能
- jQuery Mobile 所有data-*选项,开发全解+完美注释
- 【转】HDMI之TMDS信号
- C#中dll调用方法
- Session提要
- 【转】如何修改 video 样式
- HDU 1038(速度里程计算 **)
- Reading Level Assessment Using Support Vector Machines and Statistical Language Models-paper
- 《Linux内核分析》实践2
- CEPH LIO iSCSI Gateway
- 20155314 2016-2017-2 《Java程序设计》第7周学习总结
- 在Linux下设置定时任务(每分钟执行一次特定的shell脚本)
- python decorator 装饰器
- hadoop2.x配合ZooKeeper集群环境搭建
- MySQL优化之profile
- Net编程 详解DataTable用法【转】
热门文章
- 转换GMT秒数为日期时间格式-Delphi源码
- 判断一个窗口是否被挂起(发WM_NULL消息,或者调用IsHungAppWindow API进行测试)
- 做个知识回顾目录,打算每日更新一下ios的基础知识
- dedecms自学
- C语言实现常用数据结构——队列
- ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
- 高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API
- Scala 学习之路(三)—— 流程控制语句
- HTML连载19-子元素选择器&;交集选择器
- Linux下,非Docker启动Elasticsearch 6.3.0,安装ik分词器插件,以及使用Kibana测试Elasticsearch,