public class Bahuang { public static void main(String[] args) { Recursion05 r = new Recursion05(); int[] board=new int[8]; r.eightQueens(board,0); System.out.println("一共"+r.count+"种"); } } class Recursion05 { int count = 0; public void eightQueens(int[] board, int i) { if (verify(board, 7)) { count++; System.out.println("第" + count + "种情况"); print(creatArray(board)); } else { for (int j = 0; j < 8; j++) { board[i] = j; if (verify(board, i)) { eightQueens(board, i + 1); } } } } public boolean verify(int[] array, int n) { for (int i = 0; i < n; i++) { if ((Math.abs(i - n) == Math.abs(array[i] - array[n])) || array[i] == array[n]) { return false; } } return true; } public char[][] creatArray(int[] array) { char[][] ret = new char[array.length][array.length]; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array.length; j++) { if (array[i] == j) { ret[i][j] = 'Q'; } else { ret[i][j] = '*'; } } } return ret; } public void print(char[][] array) { for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j] + " "); } System.out.println(); } } }
时间: 2024-02-10 08:29:21 浏览: 28
这段代码是一个八皇后问题的解法。八皇后问题是一个经典的回溯算法问题,目标是在一个 8x8 的棋盘上放置 8 个皇后,使得它们互相之间不能攻击到对方。
代码中的 `Bahuang` 类是程序的入口点,通过创建 `Recursion05` 对象来解决八皇后问题。`eightQueens` 方法使用递归来尝试在每一行放置皇后,并进行验证。如果成功找到一种解决方案,则计数器 `count` 加一,并打印出当前解决方案。
`verify` 方法用于验证当前放置的皇后是否与之前放置的皇后冲突。它会检查是否存在同一列、同一对角线上已经存在皇后。
`creatArray` 方法用于将皇后的位置转换为字符数组,以便打印出当前解决方案。
`print` 方法用于打印字符数组表示的棋盘。
整个逻辑是通过递归和回溯来搜索所有可能的解决方案,并输出最终的结果。
相关问题
public class Person private String name=“ Person” int age=0; Public class Child extends Person public String grade; public static void main (String args) Person p = new Child(); System.out.println(p.name);
这段代码有几个语法错误,应该修改为以下内容:
```java
public class Person {
private String name = "Person";
private int age=0;
}
public class Child extends Person {
public String grade;
public static void main(String[] args) {
Person p = new Child();
System.out.println(p.name);
}
}
```
在这个修正后的代码中,我们定义了 `Person` 和 `Child` 两个类。`Child` 继承自 `Person`,并新增一个 `grade` 属性。`Person` 类中有一个私有属性 `name` 和一个私有属性 `age`。注意,这里我们将 `name` 和 `age` 设置成私有的,因此在 `Child` 类中是不能直接访问它们的。在 `Child` 类中,我们定义了一个 `main` 方法,创建了一个 `Child` 对象并将其赋值给 `Person` 类型的变量 `p`。由于 `Child` 继承自 `Person`,因此可以将 `Child` 对象赋值给 `Person` 类型的变量。最后,我们在 `main` 方法中输出 `p.name` 的值,这里输出的是 `"Person"`。由于 `name` 是 `Person` 类的私有属性,因此子类中是不能直接访问它的。
class demo{public static void main(int x=div(1,2}
在这个问题里,需要对Java语言的语法和调用函数的方式有一定的了解。
首先,在Java中,main方法的参数是一个字符串数组,而不是一个整数。另外,在方法参数的定义中不可以给参数一个默认的初始值。
在这个例子中,如果要调用一个div函数并将结果赋值给x,首先需要定义一个div函数。假设div函数是一个可以接受两个整数参数并返回它们相除的函数,那么它的定义可能是这样的:
public static int div(int a, int b){
return a / b;
}
然后,在main方法中调用div函数,并将结果赋值给x,可以这样写:
public static void main(String[] args){
int x = div(1, 2);
}
上面的代码中,main方法接受一个字符串数组参数args。在方法体内部,使用div(1, 2)的结果赋值给x。这样x的值就是1除以2的结果,即0。
综上所述,能正确执行的代码应该是:
public class demo{
public static int div(int a, int b){
return a / b;
}
public static void main(String[] args){
int x = div(1, 2);
}
}
希望以上内容能够解答您的问题。如有其他疑问,欢迎继续询问。