前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >N皇后问题_Java递归解决N皇后问题

N皇后问题_Java递归解决N皇后问题

作者头像
全栈程序员站长
发布2022-11-11 14:47:03
5450
发布2022-11-11 14:47:03
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript
复制
   18124 N皇后问题 
  时间限制:2000MS  内存限制:65535K 提交次数:0 通过次数:0题型: 编程题   语言: G++;GCC;VC Description有N*N的国际象棋棋盘,要求在上面放N个皇后,要求任意两个皇后不会互杀,有多少种不同的放法?
  输入格式 每一个数为T,代表CASE的数量,T<=13
此后,每行一个数N(13>=N>0)
 

  输出格式 每一个CASE,输出对应答案 

输入样例
2
4
5

输出样例
2
10



//排列问题  关键在于  while( n-- ) {  if(**) 递归 ;}  if是为了适应特殊要求的数字序列
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
using namespace std;
void All(int T[],int n,int cur ,int &a)    //cur 代表 第cur+1 列   共n列  
{
 
    if(cur==n) a++;   //cur==n 说明有一个符合要求的数字序列
    else for(int i=0;i<n;i++)
    {
 
        int sig=1;
        for(int j=0;j<cur;j++) if(T[j]==i) {sig=0;break;} //用来限制 数字序列不在同一行
        for(int j=0;j<cur;j++) if(abs(i-T[j])==abs(cur-j)) {sig=0;break;}//第j列 不会和 第cur列 斜杀
        if(sig)//符合两个条件 才进行 下一列的 递归
        {
 
            T[cur]=i;
            All(T,n,cur+1,a);
        }
    }
}
int main()
{
 
    int n,m,T[13],Count;
    cin>>n;
    while(n--)
    {
 
        cin>>m;
        Count=0;//共有多少可能  初始化 0
        All(T,m,0,Count);
        cout<<Count<<endl;
    }
}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187685.html原文链接:https://javaforall.cn 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月29日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档