您的位置:首页 > 其它

从经典的八皇后问题看回溯

2007-07-26 18:20 211 查看
package backtracking;
/**
*运用递归做的"八皇后"经典问题,掌握回溯思想
* @author LeLe
*
*/
public class EightQueen {

//竖线
boolean[] line = new boolean[4];
//左对角线
boolean[] leftDiagonal = new boolean[7];
//右对角线
boolean[] rightDiagonal = new boolean[7];
//y坐标存储
int[] lineS = new int[4];

public EightQueen(){
line[0] = line[1] = line[2] = line[3] = true;
for (int i = 0; i < leftDiagonal.length&&i < rightDiagonal.length; i++) {
leftDiagonal[i] = true;
rightDiagonal[i] = true;
}
}
public void putQueen(int row){
for (int i = 0; i < line.length; i++) {
if(line[i]==true&&leftDiagonal[row+i]==true&&rightDiagonal[row-i+3]==true){
//操作成功
line[i] = false;
leftDiagonal[row+i] = false;
rightDiagonal[row-i+3] = false;
lineS[row] = i;
if(row<line.length-1){
this.putQueen(row+1);
}else if(row == line.length-1){
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
for (int j = 0; j < line.length; j++) {
System.out.println("皇后坐标为"+j+" "+lineS[j]);
}
System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");
}
line[i] = true;
leftDiagonal[row+i] = true;
rightDiagonal[row-i+3] = true;
}
}
}

public static void main(String[] args){
EightQueen queen = new EightQueen();
long a = System.currentTimeMillis();
queen.putQueen(0);
long b = System.currentTimeMillis();
System.out.println("执行时间为 "+(b-a)+"毫秒");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: