当前位置: 代码迷 >> 综合 >> 1027. 皇后问题(SPJ)
  详细解决方案

1027. 皇后问题(SPJ)

热度:44   发布时间:2023-12-06 11:28:26.0

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:
1026皇后问题
其实如果能A1026,只要把那个思路拿过来改成dfs就可以了
这道题目所给的数据n<=13,但是由于if的判断,所以时间复杂度一定是小于n?的

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=444444;
int n,cnt=0,a[111],ans[111];
int numx[maxn],numy[maxn],num1[maxn],num2[maxn];
void dfs(int depth)
{
    if(depth==n+1){
    cnt++;for(int i=1;i<=n;i++) ans[i]=a[i]-1;return;}for(int i=1;i<=n;i++){
    if(numy[i]==0&&num1[i+depth]==0&&num2[i-depth+100]==0){
    a[depth]=i;//cout<<"depth="<<depth<<" "<<a[depth]<<endl;numy[i]=1;num1[i+depth]=1;num2[i-depth+100]=1;dfs(depth+1);numy[i]=0;num1[i+depth]=0;num2[i-depth+100]=0;}}
}
int main()
{
    cin>>n;dfs(1);cout<<cnt<<endl;if(cnt!=0){
    for(int i=1;i<=n;i++) cout<<ans[i]<<" ";cout<<endl;}return 0;
}