C语言一菜鸟级


私信TA

用户名:LHL

访问量:63152

签 名:

AC总是意料之外 ^_^

等  级
排  名 47
经  验 11164
参赛次数 5
文章发表 56
年  龄 24
在职情况 在职
学  校 四川工商学院
专  业 通信工程

  自我简介:

C语言 蓝桥杯 ACM 新人 欢迎大佬 前来指导 交流 本人 博客https://fivecc.blog.csdn.net/

解题思路: dfs

注意事项:

参考代码:

#include <stdio.h>
int a[13][13]={0};
int n;
int sum=0;
void f(int s)
{int x,y,j,i;
if(s==0)
   {sum++;
   }
   else 
   {x=s;//因为要放N个皇后所以根据要求只能每行有一个所以给第几个皇后找为就等价于给第几行找列的位数 
     for(y=1;y<=n;y++)//找可行的列位数 
       if(a[x][y]==0)
       { for(i=1;i<=n;i++)
        {a[x][i]+=1;a[i][y]+=1;}//标记 同行同列 
       for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
          if((i-x)==(j-y)||(i-x)==-(j-y))a[i][j]+=1;//标记斜对角 通过斜率为1或-1 
          f(s-1);//找下个皇后 
          for(i=1;i<=n;i++)//清除标记 
        {a[x][i]-=1;a[i][y]-=1;}
       for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
          if((i-x)==(j-y)||(i-x)==-(j-y))a[i][j]-=1;
       }
   
   
   }
   
}
int main()
{int x,y,i,j,h;
scanf("%d%d%d",&n,&x,&y);
  for(i=x-1;i<=x+1;i++)
   for(j=y-1;j<=y+1;j++)//标记国王范围 
     if(i>0&&j>0)a[i][j]=1;
     h=n;
     f(h);
     printf("%d\n",sum);
return 0;
}


 

0.0分

3 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区