⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bahuanghou.c

📁 八皇后算法完整程序
💻 C
字号:
#include <stdio.h>
#include <math.h>

int c=0;
/* 输出棋盘*/
void PrintTheChessBoard(int queens[], int n)
{
    int i,j;

    for (i=0;i<n;i++)
    {
        for (j=0;j<queens[i]; j++)
        {
            printf("x");
        }
        printf("O");
        for (j=n; j>queens[i]; j--)
        {
            printf("x");
        };
        putchar('\n');
    }
    printf("this is no.%d answer \nPlease press enter to see the next answer\n",c);
    getch();

}

/* 检查棋盘从第 0 行到第 i 行的布局是否合法*/
int CheckTheChessBoard(int queens[], int i)
{
    int j, k;

    for (j=0; j<=i;j++)
    {
        for (k=0; k<=i;k++)
        {      /* 检查棋盘 列 和 对角线 上元素是否合法*/
            if (j!=k&&(queens[j]==queens[k]||abs(queens[j]-queens[k])==abs(j - k)))
            {
                return 0;
            }
        }
    }

    return 1;
}

void QUEENS(int queens[], int i, int n)
{
    if (i == n)
    {
        c ++;
        PrintTheChessBoard(queens, n);
    }
    else
    {
        int j;

        for (j = 0; j < n; j ++)
        {
            queens[i] = j;
            if (CheckTheChessBoard(queens, i))   /*递归判断*/
            {
                QUEENS(queens, i + 1, n);
            }
        }
    }
}

void main()
{
    int queens[8];
    int size=8;
    QUEENS(queens, 0, size);
    printf("There is %d answers for the %d queen question", c, size);
    getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -