回溯法解决八皇后问题
八皇后问题,国际象棋是8x8的棋盘,其中皇后可以斜着走,竖着走,横着走,无距离限制 问:如果在这个棋盘上面摆满8个皇后,同时相互不被吃掉
public class QueenSort {
static int count = 1 ;
public static void main (String[] args) {
int arr[][] = new int [8 ][8 ];
putQueen(arr,0 );
}
public static void show (int arr[][]){
System.out.println("第" +count+"摆法" );
for (int i=0 ;i<arr.length;i++){
for (int j=0 ;j<arr.length;j++){
System.out.print(arr[i][j]+"\t" );
}
System.out.println();
}
count ++;
}
/**
*
* @return 该格是否可以存放皇后
*/
public static boolean check (int arr[][],int row,int col){
for (int i=row-1 ;i>=0 ;i--){
if (arr[i][col] == 1 ) return false ;
}
for (int i=row-1 ,j=col-1 ;i>=0 &&j>=0 ;i--,j--){
if (arr[i][j] == 1 ) return false ;
}
for (int i=row-1 ,j=col+1 ;i>=0 &&j<8 ;i--,j++){
if (arr[i][j] == 1 ) return false ;
}
return true ;
}
public static void putQueen (int arr[][],int row){
for (int i=0 ;i<8 ;i++){
if (check(arr,row,i)){
arr[row][i] = 1 ;
if (row>=7 ){
show(arr);
}else {
putQueen(arr,row+1 );
}
arr[row][i] = 0 ;
}
}
}
}