您的位置:首页 > 其它

N皇后问题 hdu2553

2016-05-14 17:04 344 查看


#include <iostream>

#include <cstring>

using namespace std;

#define N 20

int dp
, a

;

int n, tmp;

void dfs(int k);

int judge(int x,int y);

int main()

{

    memset(a,0,sizeof(a));

    for(n=1;n<=10;n++)//时间复杂度

    {

        tmp=0;

        dfs(1);

        dp
=tmp;

    }

    int t;

    while(cin>>t,t!=0)

    {

        cout<<dp[t]<<endl;

    }

    return 0;

}

void dfs(int k)

{

    if(k==n+1)

    {

        tmp++;

        return ;

    }

    else

    {

        for(int i=1;i<=n;i++)

        {

            if(judge(k,i)==1)

            {

                a[k][i]=-1;

                dfs(k+1);

                a[k][i]=0;

            }

        }

    }

    return ;

}

int judge(int x,int y)

{

    for(int i=1;i<=n;i++)

    {

        if(a[x][i]==-1||a[i][y]==-1)

            return -1;

        for(int j=1;j<=n;j++)

        {

            if((i+j==x+y||x-y==i-j)&&a[i][j]==-1)//对角线的含义

            {

                return -1;

            }

        }

    }

    return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: