AcWing 843. n-皇后问题

n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。

现在给定整数n,请你输出所有的满足条件的棋子摆法。

#include<bits/stdc++.h>
using namespace std;
int p[100],n[100];
int l[100];
int a;
int ma[100];
void out()
{
    for(int i=1;i<=a;i++)
    {
        for(int j=1;j<=a;j++)
            if(j!=ma[i])printf(".");
            else printf("Q");
        puts("");
    }
    puts("");
}
void dfs(int x)
{
    if(x>a)out();
    else 
        for(int i=1;i<=a;i++)
            if(!l[i]&&(!p[x+i])&&(!n[x-i+a]))
            {
                l[i]=p[x+i]=n[x-i+a]=1;
                ma[x]=i;
                dfs(x+1);
                l[i]=p[x+i]=n[x-i+a]=0;
            }
}
int main()
{
    cin>>a;
    dfs(1);
    return 0;
}

 

posted @ 2020-12-29 16:56  君与  阅读(42)  评论(0编辑  收藏  举报