From 48746fa165efc2dc0443d7f4301cb51b4556e972 Mon Sep 17 00:00:00 2001 From: liangjinglin Date: Wed, 15 Jan 2025 15:18:31 +0800 Subject: [PATCH] =?UTF-8?q?2025-01-15=20=E5=85=AB=E7=9A=87=E5=90=8E?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/Recursion/EigthQueen.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/dataANDcalc/java/Recursion/EigthQueen.java diff --git a/src/dataANDcalc/java/Recursion/EigthQueen.java b/src/dataANDcalc/java/Recursion/EigthQueen.java new file mode 100644 index 0000000..881721e --- /dev/null +++ b/src/dataANDcalc/java/Recursion/EigthQueen.java @@ -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); + } + + +}