N皇后问题
2015-11-28 17:44
232 查看
public class Queen {
private static final int n = 10;
private static int[] val = new int
;
/**
* 确定r行已放置的皇后是否可以
* @param r:行号
*/
public boolean isPlace(int r){
boolean b = true;
for(int i = 0; i < r; i++){
if (val[r] == val[i] || Math.abs(val[r] - val[i]) == Math.abs(r -i)) {
b = false;
break;
}
}
return b;
}
/**
* 递归法实现N皇后问题,确定每一行皇后放置位置
* @param r:行号,从0到n-1
*/
public void traceBackQueen(int r) {
if (r == n) {
print();
}else {
for (int i = 0; i < n; i++) {
val[r] = i;
if (isPlace(r)) {
traceBackQueen(r+1);
}
}
}
}
/**
* 打印结果
*/
public void print(){
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j == val[i]) {
System.out.print("("+ i + "," + j +")" + "/t");
}
}
}
System.out.println();
}
/*
* test
*/
public static void main(String[] args){
Queen queen = new Queen();
queen.traceBackQueen(0);
}
}
private static final int n = 10;
private static int[] val = new int
;
/**
* 确定r行已放置的皇后是否可以
* @param r:行号
*/
public boolean isPlace(int r){
boolean b = true;
for(int i = 0; i < r; i++){
if (val[r] == val[i] || Math.abs(val[r] - val[i]) == Math.abs(r -i)) {
b = false;
break;
}
}
return b;
}
/**
* 递归法实现N皇后问题,确定每一行皇后放置位置
* @param r:行号,从0到n-1
*/
public void traceBackQueen(int r) {
if (r == n) {
print();
}else {
for (int i = 0; i < n; i++) {
val[r] = i;
if (isPlace(r)) {
traceBackQueen(r+1);
}
}
}
}
/**
* 打印结果
*/
public void print(){
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (j == val[i]) {
System.out.print("("+ i + "," + j +")" + "/t");
}
}
}
System.out.println();
}
/*
* test
*/
public static void main(String[] args){
Queen queen = new Queen();
queen.traceBackQueen(0);
}
}
相关文章推荐
- Storm配置属性和操作命令
- 【多线程编程】模拟QQ的“正在输入...”,输入状态检测原理
- mysql 安装期间遇到的问题
- poj2406 Power Strings(kmp失配函数)
- AS3加载操作swf
- N皇后问题
- UINavigationController设置导航栏属性
- C++ const
- ANT多渠道打包
- Happy Number
- LintCode 二叉树路径求和
- Add Binary
- 关于用指针方式访问二维数组的问题
- UML学习:机房收费系统-对象图
- 新测 thinkphp3.2 整合 PHPMailer 发送邮件
- Objective-C Delegate
- 南通大学教务管理微信体验
- 【Leetcode】N-Queens
- 第一部分、十道海量数据处理面试题
- 非主流自然语言处理——遗忘算法系列(三):分词