博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【N-Queens】cpp
阅读量:5921 次
发布时间:2019-06-19

本文共 2090 字,大约阅读时间需要 6 分钟。

题目:

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:        static vector
> solveNQueens(int n) { vector
> ret; if ( n==0 ) return ret; vector
tmp; vector
colUsed(n,false); vector
diagUsed1(2*n-1,false); vector
diagUsed2(2*n-1,false); Solution::dfs(ret, tmp, n, colUsed, diagUsed1, diagUsed2); return ret; } static void dfs( vector
>& ret, vector
& tmp, int n, vector
& colUsed, vector
& diagUsed1, vector
& diagUsed2 ) { const int row = tmp.size(); if ( row==n ) { ret.push_back(tmp); return; } string curr(n,'.'); for ( size_t col = 0; col

tips:

深搜写法:

1. 找到一个解的条件是tmp的长度等于n

2. 在一列中遍历每个位置,是否能够放置Q,并继续dfs;返回结果后,回溯tmp之前的状态,继续dfs。

一开始遗漏了对角线也不能在有超过一个Q的条件,补上之后就AC了。

========================================

第二次过这道题,string(n, '.')一直写成了string('.', n),改过来就AC了。

class Solution {public:        vector
> solveNQueens(int n) { vector
> ret; if ( n<1 ) return ret; vector
tmp; vector
colUsed(n, false); vector
r2l(2*n-1, false); vector
l2r(2*n-1, false); Solution::dfs(ret, tmp, n, colUsed, r2l, l2r); return ret; } static void dfs( vector
>& ret, vector
& tmp, int n, vector
& colUsed, vector
& r2l, vector
& l2r) { if ( tmp.size()==n ) { ret.push_back(tmp); return; } int r = tmp.size(); string row(n, '.'); for ( int i=0; i

 

转载于:https://www.cnblogs.com/xbf9xbf/p/4532922.html

你可能感兴趣的文章
Sweet.js 教程 2 递归宏以及自定义模式类
查看>>
Fanout - 更容易得写并发代码
查看>>
红帽接手维护 OpenJDK 8 和 OpenJDK 11
查看>>
人工智能在能源行业的5个应用
查看>>
印度智能手机市场几乎沦为中国玩家俱乐部,但三星表示不服
查看>>
Java码农必须掌握的循环删除List元素的正确方法!
查看>>
HTML5的Websocket(理论篇 I)
查看>>
RxJS速成 (下)
查看>>
ubuntu 安装php-redis
查看>>
JS-制作可伸缩的水平菜单栏
查看>>
Uber无人车现身旧金山街头,合法否?
查看>>
走出架构误区,架构师并不是想象的那么容易
查看>>
【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2012年版)
查看>>
[kaggle]DC比赛进程
查看>>
游戏+区块链的进化三段论:从投机增值到生态意识
查看>>
hadoop2.6.4 安装和编译
查看>>
2017年IT主要趋势之一:数字基础设施
查看>>
法国Navya无人驾驶巴士正式开始测试,并计划明年出售450辆
查看>>
从两大示范区看国内无人驾驶:阻碍重重但难挡前进步伐
查看>>
使用JConsole观察分析Java程序的运行(转)
查看>>