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 15:29:21 浏览: 68
这段代码是一个八皇后问题的解法。八皇后问题是一个经典的回溯算法问题,目标是在一个 8x8 的棋盘上放置 8 个皇后,使得它们互相之间不能攻击到对方。
代码中的 `Bahuang` 类是程序的入口点,通过创建 `Recursion05` 对象来解决八皇后问题。`eightQueens` 方法使用递归来尝试在每一行放置皇后,并进行验证。如果成功找到一种解决方案,则计数器 `count` 加一,并打印出当前解决方案。
`verify` 方法用于验证当前放置的皇后是否与之前放置的皇后冲突。它会检查是否存在同一列、同一对角线上已经存在皇后。
`creatArray` 方法用于将皇后的位置转换为字符数组,以便打印出当前解决方案。
`print` 方法用于打印字符数组表示的棋盘。
整个逻辑是通过递归和回溯来搜索所有可能的解决方案,并输出最终的结果。
相关问题
public class Main { public static void main(String[] args) { int size = 5; for (int i = 0; i < size; i++) { for
(int j = 0; j < size; j ) { System.out.print("*"); } System.out.println(); } }}
The code above is incomplete and will not run as it is missing the increment statement for the loop variables i and j.
A corrected version of the code would be:
public class Main {
public static void main(String[] args) {
int size = 5;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
This code will print a square made of asterisks with a size of 5x5.
*/ public class Test ( public static void main ( String [] args ){ int [] a = new int [10]; int [] b = new int [10]; /*end* */
这段代码有语法错误,需要补充完整后才能运行。大概的意思是定义了两个长度为10的整型数组a和b。可以尝试如下修改:
```
public class Test {
public static void main(String [] args) {
int[] a = new int[10];
int[] b = new int[10];
// 以下是你需要添加的代码
for (int i = 0; i < a.length; i++) {
a[i] = i;
b[i] = a[i] * 2;
System.out.println("a[" + i + "]=" + a[i] + ", b[" + i + "]=" + b[i]);
}
}
}
```
这段代码会输出数组a和b中的元素,a中的元素是从0到9,b中的元素是a中元素的两倍。
阅读全文