什么是回溯算法
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。
常见的案例
二叉树的前中后遍历,图的遍历等等。
8皇后简介
八皇后算法描述如下:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法!
图1
JAVA代码
int[] clos = null;
int count = 0;
public void placeQueues(int n){
if(n < 1){
return;
}
clos = new int[n];
queue(0);
System.out.println(n+"皇后一共有"+count+"种摆发");
}
public void queue(int row){
if(row == clos.length){
count ++;
print();
return;
}
for(int col=0;col<clos.length;col++){
if(isCheck(row,col)){
clos[row] = col;
//回溯算法的核心就在此
queue(row+1);
}
}
}
public boolean isCheck(int row,int col){
for(int i=0;i<row;i++){
if(col == clos[i]) return false;
if(row-i == Math.abs(col-clos[i])) return false;
}
return true;
}
public void print(){
for(int row=0;row<clos.length;row++){
for(int clo=0;clo<clos.length;clo++){
if(clos[row] == clo){
System.out.print("1 ");
}else{
System.out.print("0 ");
}
}
System.out.println();
}
System.out.println("--------------------------");
}
网友评论