- 国际象棋有 8×8 格,每个格子可放一个棋子。皇后的规则是可以横、竖、 斜移动。在一个棋盘放置 8 个皇后,并使它们互相无法威胁到彼此。
#include <stdio.h>
#define N 8
int board[N][N];
int Safe(int row, int column) {
int i, j;
for (i = 0; i < row; i++) {
if (board[i][column] == 1) {
return 0;
}
}
for (i = row, j = column; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == 1) {
return 0;
}
}
for (i = row, j = column; i >= 0 && j < N; i--, j++) {
if (board[i][j] == 1) {
return 0;
}
}
return 1;
}
int chess(int row) {
int column;
if (row == N) {
return 1;
}
for (column = 0; column < N; column++) {
if (Safe(row, column)) {
board[row][column] = 1;
if (chess(row + 1)) {
return 1;
}
board[row][column] = 0;
}
}
return 0;
}
void printboard() {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
int main() {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
board[i][j] = 0;
}
}
if (chess(0)) {
printboard();
}
return 0;
}