[LeetCode]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.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VvcnVkaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
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.."]
]
參考:LeetCode 题解
戴方勤 (soulmachine@gmail.com)
https://github.com/soulmachine/leetcode
public class Solution {
boolean[] column = null;
boolean[] diag = null;
boolean[] anti_diag = null;
int[]C = null;
String model = null;
public List<String[]> solveNQueens(int n) {
column = new boolean[n];
diag = new boolean[2*n];
anti_diag = new boolean[2*n];
C = new int[n];//Q在第i行的第几列
List<String []> res = new ArrayList<>();
dfs(0,res,n);
return res;
}
private void dfs(int row,List<String[]> res,int n){
if(row==n){
String [] str = new String[n];
for(int i=0;i<n;i++){
StringBuilder sb = new StringBuilder();
for(int j=0;j<n;j++){
if(C[i]==j){
sb.append("Q");
}else{
sb.append(".");
}
}
str[i] = sb.toString();
}
res.add(str);
return;
}
for(int j=0;j<n;j++){
if(!column[j]&&!anti_diag[row+j]&&!diag[n-row-1+j]){
C[row]=j;
}else{
continue;
}
column[j]=anti_diag[row+j]=diag[n-row-1+j]=true;
dfs(row+1,res,n);
column[j]=anti_diag[row+j]=diag[n-row-1+j]=false;
}
}
}
版权声明:本文博客原创文章。博客,未经同意,不得转载。
[LeetCode]N-Queens 八皇后问题扩展(经典深层搜索)的更多相关文章
- Python----递归------Eight Queens 八皇后问题
递归思想是算法编程中的重要思想. 作为初学者,对递归编程表示很蒙逼,每次遇到需要递归的问题,心里就有一万头草泥马飞过~~~~~~(此处略去一万头草泥马) 在B站看数据结构与算法的视频时,视频中给了两个 ...
- [CareerCup] 9.9 Eight Queens 八皇后问题
9.9 Write an algorithm to print all ways of arranging eight queens on an 8x8 chess board so that non ...
- 算法——八皇后问题(eight queen puzzle)之回溯法求解
八皇后谜题是经典的一个问题,其解法一共有种! 其定义: 首先定义一个8*8的棋盘 我们有八个皇后在手里,目的是把八个都放在棋盘中 位于皇后的水平和垂直方向的棋格不能有其他皇后 位于皇后的斜对角线上的棋 ...
- 洛谷 p1219 八皇后
刚参加完蓝桥杯 弱鸡错了好几道..回头一看确实不难 写起来还是挺慢的 于是开始了刷题的道路 蓝桥杯又名搜索杯 暴力杯...于是先从dfs刷起 八皇后是很经典的dfs问题 洛谷的这道题是这样的 上面的布 ...
- 九度OJ 1140:八皇后 (八皇后问题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:795 解决:494 题目描述: 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * ...
- LeetCode 31:递归、回溯、八皇后、全排列一篇文章全讲清楚
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天我们讲的是LeetCode的31题,这是一道非常经典的问题,经常会在面试当中遇到.在今天的文章当中除了关于题目的分析和解答之外,我们还会 ...
- 54. 八皇后问题[eight queens puzzle]
[本文链接] http://www.cnblogs.com/hellogiser/p/eight-queens-puzzle.html [题目] 在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即 ...
- 洛谷 P1219 八皇后【经典DFS,温习搜索】
P1219 八皇后 题目描述 检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行.每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子. 上面的布局可以用序 ...
- LeetCode 回溯法 别人的小结 八皇后 递归
#include <iostream> #include <algorithm> #include <iterator> #include <vector&g ...
随机推荐
- ASP.NET MVC 5 入门摘要
翻译和编辑的第一阶段后,.我们已经发出12片ASP.NET MVC 5入门文章. 他们中的大多数来自翻译ASP.NET MVC 5 官方教程,因为本系列文章言简意赅,篇幅适中,从一个web站点演示样例 ...
- GUI (图形界面)知识点
一:组件知识点 JTextField: 作用: 定义文本域,只支持单行输入. 使用: 定义文本域: JTextField jtf=new JTextField ...
- 开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式
原文:[原创]开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式 开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math. ...
- NGUI 3.5教程(四)Atlas和Sprite(制作图片button)
Atlas是NGUI的图集.我的理解是:Atlas把你的一些零散的图片,合并成一张图.这样做的优点是,能够减少Draw Call.我不了解它的底层运作机制,我猜应该也是再行进DXT之类的纹理压缩,所以 ...
- Snail—ORACLE基础之事务学习(五)
---------------事务---当运行到commit时 事务才算是完毕,不然 会运行rollback操作. declare v_money acount.money%type:=1223; e ...
- Android中的表格布局TableLayout
表格布局最基本的三个属性: XML代码实例: <?xml version="1.0" encoding="utf-8"?> <LinearLa ...
- Paypal-Express Checkout快捷支付方式的android端开发心得(二)
一.前导 上一篇讲的不是非常好,这里再又一次讲一下. Paypal手机支付有2种形式: 1.Mobile Express Checkout,MEC,快捷支付 2.MPL 假设採用MEC支付方式,这样的 ...
- IOS应用上传须要做的工作
苹果开发人员 https://developer.apple.com/ 证书创建流程 certificates (证书): 是电脑可以增加开发人员计划的凭证 证书分为:开发证书和公布(产品)证书, ...
- html5中关于input使用方法的改变
測试环境:Firefox 10.0.Safari 5.1.Opera 11.61, Chrome 14.0.835.202 自己測试的时候都有写在form表单里,有提交button验证.由于对博客使用 ...
- js 面向对象选项卡
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" conte ...