从经典的八皇后问题看回溯
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)+"毫秒");
}
}
/**
*运用递归做的"八皇后"经典问题,掌握回溯思想
* @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)+"毫秒");
}
}
相关文章推荐
- 【C/C++】回溯经典算法之-->八皇后问题
- 经典回溯八皇后问题--递归
- 【算法入门经典】7.4回溯法【八皇后问题】
- 回溯法经典问题-八皇后
- Queen 八皇后问题 回溯经典解法
- 回溯经典问题之八皇后问题
- 递归与回溯之经典八皇后问题
- 经典回溯问题-八皇后
- HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)
- 回溯法——八皇后问题【通俗易懂】
- Java基于循环递归回溯实现八皇后问题算法示例
- 回溯法与八皇后问题
- 八皇后问题(经典回溯算法)
- 八皇后问题——回溯深搜
- 回溯问题+幂集、排列、子集和问题、八皇后问题
- 递归--基于回溯和递归的八皇后问题解法
- 八皇后问题回溯法
- 八皇后(回溯经典)
- 回溯算法--八皇后问题
- 枚举与回溯-八皇后与素数环问题