8皇后问题的递归解决 java

xiaoxiao2021-02-28  16

//程序运行后输出八皇后问题的解的数量 public class EightQueens { public int[] a = { -1, -1, -1, -1, -1, -1, -1, -1 }; // 元素默认值是-1 public int ways = 0; // 解决方案计数器 public boolean check(int row, int col) { // 在row行,col列可以放置皇后吗? // 初始行,第一行,无须判断,可以放皇后,下面的循环不执行 for (int i = 0; i < row; i++) { if (a[i] == col) { // 判断同列是否有皇后冲突 return false; // 返回0表示不能放,有冲突 } if (row - i == Math.abs(col - a[i])) { // 判断对角线是否有皇后冲突,注意调用了绝对值函数 return false; } } return true; } // 此函数实现在第n行放置皇后, 第n行的某一列如果放皇后,则a[n]的值由-1改为该列的列值 public void place(int n) { if (n == 8) { // 递归函数的出口,从0到7行都已经放置完毕,并且都是正确的,所以当n=8的时候, // 方案数加1 ways++; // 可以将a[n]的值输出,此处代码省略 } else { //代码开发 // 请将else语句块中的代码给以实现 for(int i=0;i<8;i++){ a[n]=i; if(check(n,i)){ place(n+1); } } //代码结束 } } public static void main(String[] args) { EightQueens eq = new EightQueens(); eq.place(0); System.out.println(eq.ways); } }
转载请注明原文地址: https://www.6miu.com/read-850046.html

最新回复(0)