/**
* 该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出: 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,
* 即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
* 该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出: 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,
* 即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
*/
static int Row = 8;
static int Col = 8;
static int Count = 0;
static int[][] maps = new int[Row][Col];
public static void main(String[] args) {
putQueen(0);
}
public static boolean isOk(int x, int y) {
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++) {
if (i == x || j == y || i - j == x - y || i + j == x + y) {
if (maps[i][j] == 8) {
return false;
}
}
}
}
return true;
}
public static void putQueen(int r) {
if (r == Row) {
Count++;
System.out.println("第" + Count + "种摆法:");
printQueen();
return;
}
for (int i = 0; i < Col; i++) {
if (isOk(r, i)) {
maps[r][i] = 8;
putQueen(r + 1);
maps[r][i] = 0;
}
}
}
public static void printQueen() {
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Col; j++) {
System.out.print(maps[i][j] + " ");
}
System.out.println();
}
}