|  | 
 
 发表于 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;
}
 | 
 |