N-Queens
2014-01-17 13:47
288 查看
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
![](http://www.leetcode.com/wp-content/uploads/2012/03/8-queens.png)
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
indicate a queen and an empty space respectively.
For example,
There exist two distinct solutions to the 4-queens puzzle:
Analysis: DFS. The index of the existQueens array is the row#, and the value of each element is the column where the queen is placed.
public class Solution {
public void solveNQueens(int row, ArrayList<String[]> res, String[] tem, int[] existQueens) {
if(row == existQueens.length) {
String[] clone = Arrays.copyOf(tem, tem.length);
res.add(clone);
return;
}
for(int col=0; col<existQueens.length; col++) {
boolean satisfied = true;
for(int i=0; i<=row; i++) {
if(existQueens[i]==col || Math.abs(i-row)==Math.abs(existQueens[i]-col)) {
satisfied = false;
break;
}
}
if(satisfied) {
existQueens[row] = col;
for(int m=0; m<col; m++) {
tem[row] += ".";
}
tem[row] += "Q";
for(int q=col+1; q<existQueens.length; q++) {
tem[row] += ".";
}
solveNQueens(row+1, res, tem, existQueens);
existQueens[row] = Integer.MIN_VALUE;
tem[row] = "";
}
}
return;
}
public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> res = new ArrayList<String[]>();
int[] existQueens = new int
;
String[] tem = new String
;
Arrays.fill(tem, "");
Arrays.fill(existQueens, Integer.MIN_VALUE);
solveNQueens(0, res, tem, existQueens);
return res;
}
}
![](http://www.leetcode.com/wp-content/uploads/2012/03/8-queens.png)
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.."] ]
Analysis: DFS. The index of the existQueens array is the row#, and the value of each element is the column where the queen is placed.
public class Solution {
public void solveNQueens(int row, ArrayList<String[]> res, String[] tem, int[] existQueens) {
if(row == existQueens.length) {
String[] clone = Arrays.copyOf(tem, tem.length);
res.add(clone);
return;
}
for(int col=0; col<existQueens.length; col++) {
boolean satisfied = true;
for(int i=0; i<=row; i++) {
if(existQueens[i]==col || Math.abs(i-row)==Math.abs(existQueens[i]-col)) {
satisfied = false;
break;
}
}
if(satisfied) {
existQueens[row] = col;
for(int m=0; m<col; m++) {
tem[row] += ".";
}
tem[row] += "Q";
for(int q=col+1; q<existQueens.length; q++) {
tem[row] += ".";
}
solveNQueens(row+1, res, tem, existQueens);
existQueens[row] = Integer.MIN_VALUE;
tem[row] = "";
}
}
return;
}
public ArrayList<String[]> solveNQueens(int n) {
ArrayList<String[]> res = new ArrayList<String[]>();
int[] existQueens = new int
;
String[] tem = new String
;
Arrays.fill(tem, "");
Arrays.fill(existQueens, Integer.MIN_VALUE);
solveNQueens(0, res, tem, existQueens);
return res;
}
}
相关文章推荐
- String,StringBuffer,StringBuilder的效率问题
- ueditor插入代码,重新编辑,setContent报错
- Extjs4中up()和down()的用法以及组件查找_ComponentQuery类
- RoboGuice :Could not load finalizer in its own class loader 警告
- iOS7和iOS6 UI适配的问题
- UITableViewCell有关处理touch事件的问题
- UIView概念及创建UIView
- KendoUI MVVM用法
- 善良公社之EasyUI框架下在datagrid中显示数据
- NSString / NSData 和图片之间的转换
- Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题
- iOS开发-ios7 UIAlertView自定义
- android Timer 定时器 更新UI
- 使用Glue4Net部署.NET应用
- Glue4Ne应用部署托管服务
- C#中StringBuilder类的使用总结
- xcodebuild和xcrun自动化编译ipa包
- 禁用UIButton的方法
- 交互设计专业必备知识,看到了好的课程,给自己一点储备
- Queries Union