Java解八皇后问题——非迭代

这两天重新做一遍,结果是92个。现在把结果贴出来,请大家指正。

 

辅助类:piece.java

package hello;


public class Piece {
private int x;
private int y;

public Piece() {
super();
}
public Piece(int x, int y) {
super();
this.x = x;
this.y = y;
}

public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}

}

主类Application.java:

//Autored by Textfire
package hello;


import java.util.ArrayList;


//@SpringBootApplication
public class Application {


public static void main(String[] args) throws Exception {
// SpringApplication.run(Application.class, args);
ArrayList<Piece> piece = new ArrayList<Piece>();
int total = 0;
StringBuffer sb = new StringBuffer();




for (int i = 0; i < 8; i++) { 
for (int j = 0; j < 8; j++) { 
if (piece.size() == 0) {
Piece p = new Piece(i, j);
piece.add(p);
break;
} else {
while ((j == 7) && (!check(piece, i, j))) {
if (i == 0)
break; 
if (piece.get(piece.size() - 1).getY() == 7) {
if(i==1)
break; //the outlet of end.
j = piece.get(piece.size() - 2).getY() + 1;
i = i - 2;
piece.remove(piece.size() - 1);
piece.remove(piece.size() - 1);
} else {
j = piece.get(piece.size() - 1).getY() + 1;
i--;
piece.remove(piece.size() - 1);
}
}


if (check(piece, i, j)) {
Piece p = new Piece(i, j);
piece.add(p);
if (piece.size() < 8) {
break;
} else {
for (Piece q : piece) {
sb.append("\t").append(q.getY());
}
total++;
System.out.println("\t  Number " + total +" : "+ sb);
sb.delete(0, sb.capacity());
if (piece.get(piece.size() - 1).getY() == 7) {
j = piece.get(piece.size() - 2).getY();
i = i - 1;
piece.remove(piece.size() - 1);
piece.remove(piece.size() - 1);
} else {
j = piece.get(piece.size() - 1).getY();
piece.remove(piece.size() - 1);
}
}
}
/*if (total > 91) {
System.out.println();
for (Piece q : piece) {
System.out.println("Row  " + q.getX() + "\t"
+ q.getY() + " \t i= " + i + "    j=  " + j
+ "       size=" + piece.size());
Thread.sleep(200);
}
}*/
}
}
}
System.out.println("Normal end.");
}


public static boolean check(ArrayList<Piece> piece, int m, int n) {

for (int i = 0; i < piece.size(); i++) {
if ((piece.get(i).getY() == n)
|| (Math.abs(piece.get(i).getY() - n) == Math.abs(piece
.get(i).getX() - m))) {
return false;
}
}
return true;
}


public int fib(int index) {
if (index == 1 || index == 2) {
return 1;
} else {
return fib(index - 1) + fib(index - 2);
}
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值