zoukankan      html  css  js  c++  java
  • HDOJ2553(2N皇后问题)

    N皇后问题

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 15419    Accepted Submission(s): 7009


    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
     打表
    #include<cstdio>
    #include<cstring>
    #include<utility>
    using namespace std;
    int vis1[20],vis2[20],vis3[20];
    int res;
    int n;
    void dfs(int dep)
    {
        if(dep==n)
        {
            res++;
            return ;
        }
        for(int i=0;i<n;i++)
        {
            if(!vis1[i]&&!vis2[dep+i]&&!vis3[dep-i+n])//主对角线行列之和相等,次对角线行列之差相等
            {
                vis1[i]=1;
                vis2[dep+i]=1;
                vis3[dep-i+n]=1;
                dfs(dep+1);
                vis1[i]=0;
                vis2[dep+i]=0;
                vis3[dep-i+n]=0;
            }
        }
    }
    int ans[20];
    int main()
    {
        int m;
        for(int i=1;i<=10;i++)
        {
            memset(vis1,0,sizeof(vis1));
            memset(vis2,0,sizeof(vis2));
            memset(vis3,0,sizeof(vis3));
            n=i;
            res=0;
            dfs(0);
            ans[n]=res;
        }
        while(scanf("%d",&m)!=EOF&&m)
        {
            printf("%d
    ",ans[m]);
        }
        return 0;
    }
  • 相关阅读:
    CentOS 7.3 CDH 5.10.0 Druid0.12.4安装记录
    cloudera manager卸载流程
    CDH5.10.0 离线安装(共3节点) 转
    CentOS 7 安装Httpd(转)
    CentOS下MySQL的彻底卸载
    CentOS7 修改主机名
    sendEvent()
    QSignalMapper Class
    ubuntu12.04开启虚拟机的unity模式
    BCM_I2C函数更改
  • 原文地址:https://www.cnblogs.com/program-ccc/p/4771659.html
Copyright © 2011-2022 走看看