N后问题

皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

上图为 8 皇后问题的一种解法。

给定一个整数 n,返回所有不同的 皇后问题的解决方案。

每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例:

输入: 4

输出: [

[".Q..", // 解法 1

"...Q",

"Q...",

"..Q."],

["..Q.", // 解法 2

"Q...",

"...Q",

".Q.."]

]

解释: 4 皇后问题存在两个不同的解法。

 import java.util.*;

 public class Solution{
public List<List<String>> solveNQueens(int n){
List<List<String>> res=new ArrayList<List<String>>();
int[] queenList=new int[n];//第i个位置存放的数表示row行时,Q的列
placeQueen(queenList,0,n,res);//在第0行放Q
return res;
} private void placeQueen(int[] queenList,int row,int n,List<List<String>> res){
if(row==n){
ArrayList<String> list=new ArrayList<String>();
for(int i=0;i<n;i++){
String str="";
for(int col=0;col<n;col++){
if(queenList[i]==col){
str+="Q";
}else{
str+=".";
}
}
list.add(str);
}
res.add(list);
}
for(int col=0;col<n;col++){
if(isValid(queenList,row,col)){
queenList[row]=col;
placeQueen(queenList,row+1,n,res);
}
}
} private boolean isValid(int[] queenList,int row,int col){
for(int i=0;i<row;i++){
int pos=queenList[i];
if(pos==col)
return false;
if(pos+row-i==col)
return false;
if(pos-row+i==col)
return false;
}
return true;
}
}

最新文章

  1. iOS可视化动态绘制八种排序过程
  2. Struts2第一个入门案例
  3. Android 怎么退出整个应用程序?
  4. CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
  5. Android各类权限意思祥解
  6. iOS检查App新版本并更新新版本
  7. yum clean all 是什么意思
  8. Delphi Virtual String Tree 基本用法
  9. k-折交叉验证(k-fold crossValidation)
  10. XAlign:用于代码对齐的Xcode插件
  11. flex 实时更新的一些方法总结
  12. 显示 mac 隐藏文件
  13. JS获取活动区域高和宽
  14. Ubuntu 安装wireshark
  15. Android权限解释
  16. How to make sure your machine is always online without sleep
  17. 两小时搞定C#版超级战舰游戏
  18. 圆方树简介(UOJ30:CF Round #278 Tourists)
  19. MemCache详细解读(转)
  20. CSS --记录

热门文章

  1. serlvet HttpServletRequest
  2. 转 linux之sed命令详解
  3. go 语言开发环境的安装与配置
  4. Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)
  5. 简述 MVC, MVP, MVVM三种模式
  6. oracle添加联合主键
  7. mongodb Shell 启动
  8. bootstrap datatable 数据刷新问题
  9. MySql学习笔记(四) —— 数据的分组
  10. 并发编程学习笔记(11)----FutureTask的使用及实现