首页 > 编程语言 > 详细

八皇后问题——C语言递归实现

时间:2020-06-13 20:16:05      阅读:42      评论:0      收藏:0      [点我收藏+]
   #include "stdio.h"
   #include "math.h"
    /////////////////////////////////Check函数功能:检验第n行的皇后是否和之前的皇后有冲突,没有的话返回1
    int Check(int a[],int n)
    {
        for(int i=1;i<n;i++)
        {
            if(abs(a[i]-a[n])==abs(i-n) || a[i]==a[n])//////////////见下面注释
                return 0;
        }
        return 1;
    }
int a[20],n,i,t=1;////////////////////////////////////////全局变量
 
void Try(int i)
{
    int j,k;
    for(j=1;j<=n;j++)
    {
        a[i]=j;
        if(Check(a,i))///////////////////////////////////////如果第j列不会与之前的皇后冲突
        {
            if(i<n)//////////////////////////////////////////如果i<n,即还没有找到八个皇后,继续递归
                Try(i+1);
            else ////////////////////////////////////////////如果找到了一组解就输出
            {
                printf("第%d种解法:\n",t++);
                for(k=1;k<=n;k++)
                    printf("第%d个皇后:%d\n",k,a[k]);
                printf("\n\n");
}    }    }    }
 
int main()
{
    printf("几皇后?n=");
    scanf("%d",&n);
    Try(1);
    return 0;
}

 八皇后之回溯法解决

八皇后问题——C语言递归实现

原文:https://www.cnblogs.com/hongdoudou/p/13121414.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!