C语言中的8皇后问题。

本文探讨了如何使用C语言解决经典的8皇后问题。通过回溯算法和递归方法,程序能够找出所有可能的解决方案。每个解决方案以'No n:'开始,表示这是第n个解,接着展示8行棋盘布局,用'A'表示皇后,'.'表示空位。输出顺序依据皇后的位置从左到右、从上到下进行排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8皇后问题
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输出8皇后问题所有结果。
输入:
没有输入。
输出:
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。

#include<stdio.h>
static int a[8]={0};
static int cnt=0;
int judge(int m,int c)//判断每种情况是否符合8皇后问题要求
{
    for(int i=0;i<m;i++)
    {
        if(a[i]==c) return 0;
        if((c-a[i])==(m-i)||(c-a[i])==(i-m)) return 0;
    }
    return 1;
}
int print(int a[8],int cnt)//输出函数
{
    int i,j;
    printf("No %d:\n",cnt);
    for(i=0;i<=7;i++)
    {
        for(j=0;j<=7;j++)
        {
            if(j==a[i])printf("A");
            if(j!=a[i])printf(".");
            if(j==7)printf("\n");
        }
    }
}
int search(int m)//回溯算法递归调用函数,枚举所有可能。
{
    int i;
    if(judge(m-1,a[m-1])==0) return 1;//调用judge函数,判断刚刚加入的皇后是否符合要求。符合则继续讨论下一行或者输出,不符合则返回讨论上一行的下一种情况。
    if(m==8)
    {
        cnt++;
        print(a,cnt);//前8行符合要求则输出
    }
    if(m<=7)
    {
        for(i=0;i<8;i++)
    {
        a[m]=i;
        search(m+1);
    } 
    }
} 
int main()
{
    search(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值