2019-03-11 八皇后问题

#include
#include
#include
using namespace std;
const int maxn = 100;
int vis1[maxn],vis2[maxn],vis[maxn];
int a[maxn],ans[9],cnt=0;
int res[maxn][9];
void dfs(int cur)
{
    if(cur==9)
    {
        cnt++;
        for(int i=1;i<=8;i++)
        {
            res[cnt][i]=ans[i];
        }
        return ;
    }
    for(int i=1;i<=8;i++)
    {
        if(!vis[i] && !vis1[i+cur] && !vis2[cur-i+8])
        {
            vis[i]=true;
            vis1[i+cur]=true;
            vis2[cur-i+8]=true;
            ans[cur]=i;
            dfs(cur+1);
            vis[i]=false;
            vis1[i+cur]=false;
            vis2[cur-i+8]=false;
        }
    }
}
int main(void)
{
    int n;
    cin >> n;
    for(int i=1;i<=n;i++) cin>>a[i];
    dfs(1);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=8;j++)
        {
            printf("%d",res[a[i]][j]);
        }
        printf("\n");
    }
    printf("%d",cnt);
    return 0;
}

你可能感兴趣的:(2019-03-11 八皇后问题)