2018-11-03

#include<stdio.h>
#define Debug
int count=0;
void Queen(int n,int l);
bool CanPut(int i,int j,int (*a)[8],int n);
void Print(int (*a)[8],int n);
int main()
{
    printf("请输入棋盘的规模\n");
    int n;
    scanf("%d",&n);
    Queen(n,0);
    if(count)
        printf("解的总数是:%d\n",count);
    else
        printf("无解\n");
    return 1;
}
int a[8][8]={0};
void Queen(int n,int l)
{
    if(l==n-1)//最后一行,递归出口
    {
        for(int j=0;j<n;j++)
        {
            if(CanPut(l,j,a,n))//是否能放置皇后
            {
                count++;
                a[l][j]=1;//标记位置
                Print(a,n);
                a[l][j]=0;//取消这个位置
            }
        }
        printf("\n");
    }
    else//不是最后一行
    {
        for(int j=0;j<n;j++)
        {
            a[l][j]=1;//假设这个位置可以放
            if(CanPut(l,j,a,n))//如果可以,递归进入下一行
                Queen(n,l+1);
            a[l][j]=0;//回溯回来后或者不可以放置皇后归0
        }
    }
    return;//如果是if,则递归出口,如果是else,则回溯到上一行
}
void Print(int (*a)[8],int n)
{//本算法打印出N皇后的解
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
bool CanPut(int i,int j,int (*a)[8],int n)
{//本算法是判断该位置能否放皇后
    int s=0;
    for(int k=i-1;k>=0;k--)
    {
        s++;
        if(a[k][j]==1 || j+s<n&&a[k][j+s]==1 || j-s>=0&&a[k][j-s]==1)
            return false;
    }
    return true;
}

作者:weixin_41133154
来源:CSDN
原文:https://blog.csdn.net/weixin_41133154/article/details/78986617
版权声明:本文为博主原创文章,转载请附上博文链接!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,426评论 0 2
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,060评论 0 2
  • 回归生活的本色,让灵魂跟上来。 前方的道路在蔓延,路旁的青山也在蜿蜒前行,极目远望,一切都在消逝了。 远方,只有纯...
    高校男公关阅读 743评论 0 0
  • 【R:阅读原文】确定某一时刻具体行动的"四标准法"。在星期三下午3点22分时,你如何选择下一步行动呢?这个时候,你...
    a心语心愿阅读 169评论 0 0
  • 原文出处 jhao 现在很多网站为了防范爬虫,做了很多反扒处理,同样对于开发者来讲,上有政策,下有对策,于是今天来...
    Panda_phc阅读 2,978评论 0 7