N皇后问题

来源:互联网 发布:淘宝网婴儿衣服婴比迪 编辑:程序博客网 时间:2024/06/06 12:35

题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=2553

#include"iostream"#include"string.h"using namespace std;int n,num;int ai[12][12];bool check(int a){    if(a>=1&&a<=n)        return true;    return false;}void tryy(int hang){    if(hang==n+1)    {        num++;        return;    }    for(int i=1;i<=n;i++)    {        int lie=i;        ai[hang][lie]=1;        bool sign=true;        for(int j=1;j<hang;j++)        {            if(ai[j][lie])            {                ai[hang][lie]=0;                sign=false;                 break;            }            int one=lie+hang-j;            int another=lie+j-hang;            if((check(one)&&ai[j][one])||(ai[j][another]&&check(another)))            {                ai[hang][lie]=0;                sign=false;                 break;            }           }        if(sign)        {            //cout<<hang<<endl;            tryy(hang+1);            ai[hang][lie]=0;        }    }}int main(){    int biao[11];    for(int i=1;i<11;i++)    {        num=0;        n=i;        //memset(ai,0,sizeof(ai));        tryy(1);        biao[i]=num;        }    while(cin>>n&&n)    {           cout<<biao[n]<<endl;    }    return 0;}

记住一定要打表,不然会超时

0 0
原创粉丝点击