|
发表于 2023-3-10 18:16:15
|
显示全部楼层
- #include <stdio.h>
- #define Q 8
- int count;
- int check(int row, int col, int (*queen)[Q]);
- void setQueen(int col, int (*queen)[Q]);
- int check(int row, int col, int (*queen)[Q])
- {
- int i;
- for (i = 0; i < Q; i++)
- {
- if (queen[i][col] == 1)
- {
- return 0;
- }
- if (queen[row][i] == 1)
- {
- return 0;
- }
- }
- for (i = 0; i < col; i++)
- {
- if (row-(i+1) >= 0)
- {
- if (queen[row-(i+1)][col-(i+1)] == 1)
- {
- return 0;
- }
- }
- if (row+(i+1) < Q)
- {
- if (queen[row+(i+1)][col-(i+1)] == 1)
- {
- return 0;
- }
- }
- }
- for (i = 1; i < Q-col; i++)
- {
- if (row-i >= 0)
- {
- if (queen[row-i][col+i] == 1)
- {
- return 0;
- }
- }
- if (row+i < Q)
- {
- if (queen[row+i][col+i] == 1)
- {
- return 0;
- }
- }
- }
- return 1;
- }
- void setQueen(int col, int (*queen)[Q])
- {
- int i, j, row;
- // 如果 col == 4, 打印四皇后棋盘
- if (col == Q)
- {
- for (i = 0; i < Q; i++)
- {
- for (j = 0; j < Q; j++)
- {
- printf("%d ", queen[i][j]);
- }
- putchar('\n');
- }
- putchar('\n');
- count++;
- return;
- }
- for (row = 0; row < Q; row++)
- {
- if (check(row, col, queen))
- {
- queen[row][col] = 1;
- setQueen(col+1, queen);
- queen[row][col] = 0;
- }
- }
- }
- int main(void)
- {
- int array[Q][Q] = {0};
- int (*queen)[Q] = array;
- setQueen(0, queen);
- printf("%d\n", count);
- return 0;
- }
复制代码 |
|