N皇后问题(hdu 2553)

不打表会超时……条件vis[curr]==vis[j]||curr-vis[curr]==j-vis[j]||curr+vis[curr]==j+vis[j]判断皇后(curr,vis[curr])和(j,vis[j])是否会在同一条对角线上


#include<bits/stdc++.h>
using namespace std;
int n,ans,vis[15];
void dfs(int curr)
{
    if(curr==n) ans++;
    else
    {
        for(int i=0;i<n;i++)
        {
            int ok=1;
            vis[curr]=i;
            for(int j=0;j<curr;j++)
            {
                if(vis[curr]==vis[j]||curr-vis[curr]==j-vis[j]||curr+vis[curr]==j+vis[j])
                {
                    ok=0;
                    break;
                }
            }
            if(ok) dfs(curr+1);
        }
    }
}
int main()
{
    int cnt[11];
    for(int i=1;i<=10;i++)
    {
        ans=0;
        n=i;
        memset(vis,0,sizeof(vis));
        dfs(0);
        cnt[i]=ans;
    }
    while(scanf("%d",&n)==1&&n)
    {
        printf("%d\n",cnt[n]);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41061455/article/details/80220021