目录
一、递归实现八皇后问题分析
1.每一次回溯计算出一行中满足条件的格子
2.回溯的方法中,会利用一个循环来判断一行中满足条件的格子,即一行中满足的列
3.当行数自增到8行时,每次循环得到的二维数组即为满足条件的一个棋盘,打印
二、代码实现
1.定义一个棋盘,并定义一个打印棋盘的方法
//定义一个棋盘
static int[][] arr = new int[8][8];
//打印这个棋盘
static int count = 0;
private static void show(){
System.out.println("第"+(count++)+"个棋盘");
for(int i = 0;i<8;i++){
for(int j = 0;j<8;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
}
2.判断某个格子是否可以放置皇后
//判断某个位置是否可以放置
private static boolean panduan(int x,int y){
//判断一列上有没有皇后
for(int i = 0;i<=x;i++){
if(arr[i][y] == 1){
return false;
}
}
//判断左上方有没有皇后
for(int i = x-1, j = y-1; i>=0&&j>=0;i--,j--){
if(arr[i][j] == 1){
return false;
}
}
//判断右上方有没有皇后
for(int i = x-1, j = y+1; i>=0&&j<=7;i--,j++){
if(arr[i][j] == 1){
return false;
}
}
return true;
}
3.设计棋盘
//当循环判断出来一行中的某个满足点时,递归出计算出下一行的点,当递归到最后一行时,打印棋盘
private static void result(int row){
for(int col = 0;col<8;col++){
if(panduan(row, col)){
arr[row][col] = 1;
if(row == 7){
show();
//arr = new int[8][8];
}else {
result(row+1);
}
arr[row][col] = 0;
}
}
}