[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 ... 
随机推荐
- Razor基础语法
			原文:Razor基础语法 一.介绍 Razor是ASP.NET MVC视图引擎的代号,支持.cshtml和.vbhtml两种模板文件,符号@标记服务端代码的开始,比以前asp.net的< ... 
- Base64加密解密原理以及代码实现
			1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符. 2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字 ... 
- configure.ac:20: error: Autoconf version 2.65 or higher is required
			安装thrift例如,下面的问题出现: configure.ac:20: error: Autoconf version 2.65 or higher is required wget http:// ... 
- UVALive 6469	 Deranged Exams (排列:力绝对是无辜的高中知识啊)
			标题手段 : 给你个n([1,17])表达n无论从数据结构.然后n个对这些术语的定义,让你对这些术语和定义对号入座(相当于进行连线,A术语连A术语的定义).然后一个 k([0,n]).问你至少前k个术 ... 
- linux学习(一个) 在unbuntu通过添加新的用户
			最近安装了双系统,开始折腾unbuntu该.Linux系统是一个多用户操作系统,非常多的人才完整的操作需要管理员权限,完全管理员权限是非常重要的.人谁是刚开始学习,般用户的权限即可了,相对于刚開始学习 ... 
- UVA 1358 - Generator(dp+高斯消元+KMP)
			UVA 1358 - Generator option=com_onlinejudge&Itemid=8&page=show_problem&category=524& ... 
- codeigniter 该脚本在运行300s超时退
			直接看代码, file:system/core/CodeIgniter.php /* 102 * -------------------------------------------------- ... 
- Maven本地仓库配置
			一. 为什么配置? 默认情况下,maven的本地仓库在C盘下用户文件夹: .m2/repository.全部的maven构件(artifact)都被存储到该仓库中.以方便重用. 可是放在C盘一个是占用 ... 
- opencv-形态处理
			开运算 (Opening) 原理摘自:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/opening_closi ... 
- C++虚函数表分析
			在<<反C++>>文中提到的 VC6.0 上的编译器支持一个d1reportAllClassLayout的开关, 能够输出全部对象的内存布局信息, 我自己经常使用vs2005来 ... 
