n皇后实验java代码 n皇后 java

八皇后问题 为什么会出现91种解.但实际结果应该是92.

可能是你没有控制好就结束了。

创新互联建站致力于网站建设,网站制作设计,营销网页按需网站制作,外贸网站建设,企业网站建设,小程序开发,网站SEO优化,网站设计制作案例丰富,是成都做网站公司和建站公司,欢迎咨询。

下面是我的java代码。你可以参考下。

private static int m = 0; // 计算种数

private static int n; //n皇后

public static void main(String[] args) {

System.out.println("请输入皇后数n(n=4)");

n = new Scanner(System.in).nextInt();

int a[] = new int[n]; // 用一位数组来存放皇后的位置,下标为行,值为列 。(如a[1] =

// 2,就是指第1行的二列有个皇后)

f(a, 0);

}

private static void f(int[] a, int i) {

if (i == n) { // 当找到八个皇后输出

sc(a);

}

for (int j = 0; j a.length; j++) {

if (fs(a, i, j)) { // 判断这个位置能不能放皇后

a[i] = j;

f(a, i + 1); // 递归调用自己

}

}

}

private static boolean fs(int[] a, int i, int j) {

for (int k = 0; k i; k++) {

if (j == a[k] || (k + a[k]) == (i + j) || (a[k] - k) == (j - i)) // 判断列、主对角、副对角上有没有皇后

/段升巧/ (因为是一行行判断的,所以行不用判断)

return false; // 如果笑手列、主对角、副对角上有皇后,返回false

}

return true; // 当循环执行完都没返回false或没有执行for,那就可以确定这个位置可以握键放皇后

}

private static void sc(int[] a) {

System.out.println("第" + (++m) + "种情况:");

for (int i = 0; i a.length; i++) {

for (int j = 0; j a.length; j++) {

if (a[i] == j)

System.out.print("Q ");

else

System.out.print(". ");

}

System.out.println();

}

System.out.println("---------------");

}


本文名称:n皇后实验java代码 n皇后 java
本文来源:http://ybzwz.com/article/dspjiso.html