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