递归,经典的八皇后问题。

利用一位数组存储棋盘状态,索引表示行,值为-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);
}
};

最新文章

  1. freeswitch
  2. (转)js闭包初入门
  3. iOS UIKit:CollectionView之设计 (1)
  4. 用户管理_组管理_设置主机名_UGO_文件高级权限_ACL权限
  5. GCD系列 之(二): 多核心的性能
  6. jQuery Mobile 所有data-*选项,开发全解+完美注释
  7. 【转】HDMI之TMDS信号
  8. C#中dll调用方法
  9. Session提要
  10. 【转】如何修改 video 样式
  11. HDU 1038(速度里程计算 **)
  12. Reading Level Assessment Using Support Vector Machines and Statistical Language Models-paper
  13. 《Linux内核分析》实践2
  14. CEPH LIO iSCSI Gateway
  15. 20155314 2016-2017-2 《Java程序设计》第7周学习总结
  16. 在Linux下设置定时任务(每分钟执行一次特定的shell脚本)
  17. python decorator 装饰器
  18. hadoop2.x配合ZooKeeper集群环境搭建
  19. MySQL优化之profile
  20. Net编程 详解DataTable用法【转】

热门文章

  1. 转换GMT秒数为日期时间格式-Delphi源码
  2. 判断一个窗口是否被挂起(发WM_NULL消息,或者调用IsHungAppWindow API进行测试)
  3. 做个知识回顾目录,打算每日更新一下ios的基础知识
  4. dedecms自学
  5. C语言实现常用数据结构——队列
  6. ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程
  7. 高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API
  8. Scala 学习之路(三)—— 流程控制语句
  9. HTML连载19-子元素选择器&amp;交集选择器
  10. Linux下,非Docker启动Elasticsearch 6.3.0,安装ik分词器插件,以及使用Kibana测试Elasticsearch,