zoukankan      html  css  js  c++  java
  • N皇后问题


    Problem Description
    在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
    你的任务是,对于给定的N,求出有多少种合法的放置方法。


    Input
    共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。

    Output
    共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

    Sample Input
    1
    8
    5
    0

    Sample Output
    1
    92
    10
    题意:都是汉语就不用解释了;
    解题思路:深搜,每找到一个出口就有一种摆法,这里判断条件唯一一个难点就是判断是不是斜线有皇后;
    斜线上是不是有皇后判断条件就是是不是到对角线的距离相等;
    感悟:两天一道题。。。。。慢死了啊
    图(原创):
    N皇后问题
       代码:
    #include
    #include
    #include
    #include
    #define maxn 15
    using namespace std;
    int n,visit[maxn],mapn[maxn],ans;
    int lis[maxn];
    void dfs(int t)
    {
        //cout<<"n="<<n<<endl;
        int flag;
        if(t==n+1)
        {
            ans++;
            //cout<<"到尽头了"<<endl;
            return;//结束的条件,每找到一个尽头,计时器就加1;
        }
        for(int i=1;i<=n;i++)
        if(visit[i]==0)//记录行数
        {
            mapn[t]=i;//记录满足条件的列数
            flag=1;//标志
            for(int j=1;j<=t-1;j++)
            if(mapn[j]==i||i-t==mapn[j]-j||i+t==mapn[j]+j)//判断是不是在一条斜线上
            //也就是到对角线的距离不一样
            {
                flag=0;
                break;
            }
            if(flag)
            {
                visit[i]=1;
                dfs(t+1);
                visit[i]=0;//将标记释放,用于下次搜索;
            }
        }
    }
    int main()
    {
        //freopen("in.txt", "r", stdin);
        for(int i=1;i<=10;i++)
        {
            ans=0;
            n=i;
            memset(visit,0,sizeof(visit));
            memset(mapn,0,sizeof(mapn));
            dfs(1);
            lis[i]=ans;
        }
        while(~scanf("%d",&n)&&n)
        printf("%d ",lis[n]);
    }


  • 相关阅读:
    IntelliJ IDEA 最新注册码
    tidyverse|数据分析常规操作-分组汇总(sumamrise+group_by)
    ComplexHeatmap|根据excel表绘制突变景观图(oncoplot)
    Tidyverse| XX_join :多个数据表(文件)之间的各种连接
    LDheatmap | SNP连锁不平衡图(LD)可视化,自己数据实现版!
    Tidyverse|数据列的分分合合,爱恨情仇
    R-ggpmisc|回归曲线添加回归方程,R2,方差表,香不香?
    R-rbind.fill|列数不一致的多个数据集“智能”合并,Get!
    R|tableone 快速绘制文章“表一”-基线特征三线表
    R|生存分析
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/5781608.html
Copyright © 2011-2022 走看看