网站wap转换,广州做网站价位,企业建网站的工作,平台网站建设ppt模板下载package com.atguigu.recursion;/*** 创建人 wdl* 创建时间 2021/3/21* 描述*/
public class Queue8 {//先定义一个max表示共有多少个皇后int max8;//定义数组array#xff0c;保存皇后防止位置的结果#xff0c;比如 arr[8] {0 , 4, 7, 5, 2, 6, 1, 3}int[] arraynew int[m…package com.atguigu.recursion;/*** 创建人 wdl* 创建时间 2021/3/21* 描述*/
public class Queue8 {//先定义一个max表示共有多少个皇后int max8;//定义数组array保存皇后防止位置的结果比如 arr[8] {0 , 4, 7, 5, 2, 6, 1, 3}int[] arraynew int[max];static int count0;public static void main(String[] args) {//测试一把8皇后是否正确Queue8 queue8 new Queue8();queue8.check(0);System.out.println(一共有count解法);}//编写一个方法放置第n个皇后//特别注意check是每一次递归时进入到check中都有for (int i 0; i max; i)因此会有回溯private void check(int n){if(nmax){//n8其实8个皇后就已经放好了print();return;}//依次放入皇后并判断是否冲突for (int i 0; i max; i) {//先把当前这个皇后n放到该行的第1列array[n]i;//判断当前放置的第n个皇后到i列时是否冲突if(judge(n)){//不冲突//接着放n1个皇后即开始递归check(n1);}//如果冲突,就继续执行array[n]i;即将第n个皇后放置在本行的后移一个位置}}//查看当我们放置第n个皇后就去检测该皇后是否和前面已经摆放的皇后冲突/**** param n 表示第n个皇后* return*/private boolean judge(int n){for (int i 0; i n; i) {//说明//1.array[i]array[n]表示判断 第n个皇后是否和前面的n-1个皇后在同一列//2.Math.abs(n-i)Math.abs(array[n]-array[i])表示判断第n个皇后是否和第i皇后是否在同一斜线//3.判断是否在同一行没有必要n每次都在递增if (array[i]array[n]||Math.abs(n-i)Math.abs(array[n]-array[i])){return false;}}return true;}//写一个方法可以将皇后摆放的位置输出private void print(){count;for (int i 0; i array.length; i) {System.out.print(array[i] );}System.out.println();}}