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

   #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种解法:
",t++);
                for(k=1;k<=n;k++)
                    printf("第%d个皇后:%d
",k,a[k]);
                printf("

");
}    }    }    }
 
int main()
{
    printf("几皇后?n=");
    scanf("%d",&n);
    Try(1);
    return 0;
}

 八皇后之回溯法解决

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