2025-01-15 八皇后问题

This commit is contained in:
liangjinglin 2025-01-15 15:18:31 +08:00
parent c1acab5c81
commit 48746fa165

View File

@ -0,0 +1,60 @@
package Recursion;
public class EigthQueen {
private int[] chessArr = new int[8];
private int answer = 0;
private void chess(int x){
// 第八个皇后也已经放好了
if (x == 8){
answer ++;
System.out.println("得到一种解法");
show();
return;
}
//将第x+1个皇后尝试遍历放到所有列上
for (int i = 0; i < 8; i++) {
chessArr[x] = i;
// 1.判断当前位置是否没有攻击到其他皇后
if (isAttack(x)){
continue;
}
// 2.如果没有攻击到其他皇后就放下一个皇后
chess(x + 1);
}
}
// chessArr={0}
private boolean isAttack(int x){
for (int i = 0; i < x; i++) {
// 1.判断当前列是否有皇后
if(chessArr[i] == chessArr[x]){
return true;
}
// 2.判断斜线是否有皇后
if(Math.abs(x - i) == Math.abs(chessArr[x] - chessArr[i])){
return true;
}
}
return false;
}
private void show(){
for (int i = 0; i < 8; i++) {
System.out.print(chessArr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
EigthQueen eigthQueen = new EigthQueen();
eigthQueen.chess(0);
int num = eigthQueen.answer;
System.out.println("总共获得的解:" + num);
}
}