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

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

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.."]]

n皇后问题,题意就是求n×n矩阵中,每行放一个棋子,使得棋子所在的列和两条斜线上没有其他棋子,枚举所有可能。

 

dfs去遍历,考虑所有可能,row中记录每一行棋子的位置,col记录当前列是否有棋子,对角线的判断就是两点行差值和列差值是否相同。

当dfs深度达到n时,就表示存在满足条件的解,把当前状态图存到结果中。

temp(n, '.')先把字符串全部赋值成 ‘ . ' ,在吧存在棋子的位置改成’Q‘

 

 

经典的8皇后,递归回溯可解。同时还学了StringBuilder里面一个setCharAt()很方便的方法 

ref:http://www.2cto.com/kf/201311/256634.html

 

public class Solution{    public ArrayList
solveNQueens(int n) { ArrayList
result = new ArrayList
(); int[] queenList = new int[n]; placeQueen(queenList, 0, n, result); return result; } // 递归回溯8皇后,关键记录下到达了哪一行了 public void placeQueen(int[] queenList, int row, int n, ArrayList
result){ // Base Case, 已经完成任务了 if(row == n){ StringBuilder[] sol = new StringBuilder[n]; // 对数组内每一个对象都要new出其对象, 并将其全设为'.' for(int i=0; i

 

 

转载于:https://www.cnblogs.com/RazerLu/p/3535578.html

你可能感兴趣的文章
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
redhat tomcat
查看>>
统计数据库大小
查看>>
IO流的学习--文件夹下文件的复制
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>
nginx在响应request header时候带下划线的需要开启的选项
查看>>
Linux下DHCP服务器配置
查看>>
AndroidStudio中导入SlidingMenu报错解决方案
查看>>
myeclipse显示行号
查看>>
编写高性能的java程序
查看>>
Spring 的配置详解
查看>>
linux已经不存在惊群现象
查看>>
上位机和底层逻辑的解耦
查看>>
关于微信二次分享 配置标题 描述 图片??
查看>>
springcloud使用zookeeper作为config的配置中心
查看>>
校园火灾Focue-2---》洗手间的一套-》电梯
查看>>
css控制文字换行
查看>>
bzoj1913
查看>>