在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
import java.util.Arrays;
/**
* @author bwb
* @date 2018/06/20
*/
public class Queen2 {
private static int[] arr = new int[8];
static int sum = 0;
private static boolean check(int row) {
for (int j = 0; j < row; j++) {
if ((Math.abs(row - j)) == (Math.abs(arr[j] - arr[row])) // 在对角线上
|| (arr[j] == arr[row])) // 判断列号是否相同
return false;
}
return true;
}
/**
* 递归
* @param row
*/
private static void fun(int row) {
if (row == 8) {
int[][] a = new int[8][8];
for (int i = 0; i < 8; i++) {
a[i][arr[i]] = 1;
}
sum++;
System.out.println(Arrays.deepToString(a));s
} else {
for (int col = 0; col < 8; col++) {
arr[row] = col;
if (check(row))
fun(row + 1);
}
}
}
public static void main(String[] args) {
fun(0);
System.out.println(sum);
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!