• N皇后问题


    N皇后问题

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 723 Accepted Submission(s): 419
     
    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
     
    Author
    cgf
     
    Source
    2008 HZNU Programming Contest
     
    Recommend
    lcy
     
    #include<bits/stdc++.h>
    #define maxn 15
    using namespace std;
    int low[15],res[15];
    int lmid[15],rmid[15];//左斜线和右斜线都是从上往下数的
    int n;
    int cur;
    void dfs(int x)
    {
        if(x==n)
        {
            cur++;
            return ;
        }
        for(int i=x;i<n;i++)
        {
            if(low[i])continue;
            for(int j=0;j<n;j++)
            {
                if(res[j]||lmid[i+n-1-j]||rmid[i+n-(n-j)]) continue;
                low[i]=1;
                res[j]=1;
                lmid[i+n-1-j]=1;
                rmid[i+n-(n-j)]=1;
                dfs(x+1);
                low[i]=0;
                res[j]=0;
                lmid[i+n-1-j]=0;
                rmid[i+n-(n-j)]=0;
            }
        }
    
    }
    int main()
    {
        for(n=1;n<=10;n++)
        {
            memset(low,0,sizeof low);
            memset(res,0,sizeof res);
            memset(lmid,0,sizeof lmid);
            memset(rmid,0,sizeof rmid);
            cur=0;
            dfs(0);
            cout<<"n="<<n<<" "<<cur<<endl;
        }
    }
    /* 附带打表大法,打表大法好啊!
    #include <iostream>
    #include<stdio.h>
    using namespace std;
    int n,x[11]={0,1,0,0,2,10,4,40,92,352,724};
    int main()
    {
        while(~scanf("%d",&n)&&n)
        printf("%d
    ",x[n]);
        return 0;
    }*/
  • 相关阅读:
    zoj3690 Choosing number
    zoj 3724 Delivery 离线处理+线段树
    hdu4422 The Little Girl who Picks Mushrooms
    hdu3555 Bomb 简单数位dp
    HDU2089 不要62 简单数位dp
    解析JSON的四种方式
    iOS中几种传值的方式
    iOS代码里面出现乱码的和模拟器没有添加模拟器的解决方法:
    UIAlterview的使用方法
    ios集成支付宝的功能
  • 原文地址:https://www.cnblogs.com/wuwangchuxin0924/p/6075014.html
Copyright © 2020-2023  润新知