八皇后问题
Posted zhangyue123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了八皇后问题相关的知识,希望对你有一定的参考价值。
这个还是有点意思的
代码分为check部分和递归部分
//程序运行后输出八皇后问题的解的数量 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 {//核心代码 //i 表示 column //这一部分实现了依次检索第n 行的第i列,判断是否可以放皇后,如果没有一个位置可以放,函数就 //结束了说明之前的放置都是无效的... 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); } }
以上是关于八皇后问题的主要内容,如果未能解决你的问题,请参考以下文章