8-Queen Problem

Problem:
Write an algorithm to print all ways of arranging eight queens on a chess board so that none of them share the same row, column or diagonal.

My Code:
________________________________________________________________

package alg;
import java.util.Stack;
public class EightQueens {
public static final int N = 8;

static class Queen {
public int x, y;
Queen(int x, int y) {
this.x = x;
this.y = y;
}
}

static void findAllResult() {
Stack<Queen> s = new Stack<Queen>();
for(int i = 0; i<N; i++){
Queen q = new Queen(0,i);
s.push(q);
locateNextQueen(1, s);
}
}

static void locateNextQueen(int row, Stack<Queen> queens){
if(row == N){
System.out.println("Find one result:");
for(Queen q : queens){
System.out.println("\t(" + q.x + "," + q.y + ")");
}
return;
}

for(int y = 0; y < N; y++){
boolean valid = true;
for(Queen queen : queens){
if( row == queen.x || y == queen.y ||
(queen.y - y == queen.x - row) ||
(queen.y - y == row - queen.x) ){
valid = false;
break;
}
}
if(valid == false){
continue;
}else {
Queen q = new Queen(row, y);
queens.push(q);
locateNextQueen(row+1, queens);
queens.pop();
}
}

}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
findAllResult();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值