题解 | #N皇后问题#

N皇后问题

https://ac.nowcoder.com/acm/problem/235813

欢迎互关,题解本蒟蒻持续发布

#include<bits/stdc++.h>
using namespace std;

const int N=20;
int cnt=0,n
**b代表竖直方向的某一列是否被标记,lf和rg是left和right的简写,分别表示左斜方向和右
斜方向是否有皇后标记了
int b[N],lf[N*N],rg[N*N];

void dfs(int num)**num=1代表遍历第一行,num=3代表遍历第三行,num代表当num>n也就是
遍历完n行之后,就结束遍历了**
{
    if(num>n){
        cnt++;
        return ;
    }
    for(int j=1;j<=n;j++)
    {//这也就是刚才说的,在num行上,遍历竖直方向,左斜方向,右斜方向是否存在皇后
        if(b[j]==0&&lf[j+num+50]==0&&rg[j-num+50]==0)
        {//如果没有存在,就标记,表示有皇后了
            b[j]=1;lf[j+num+50]=1;rg[j-num+50]=1;
            dfs(num+1);
            b[j]=0;lf[j+num+50]=0;rg[j-num+50]=0;
        }
    }
    
}

int main()
{
    cin>>n;
    
    dfs(1);
    
    cout<<cnt;
}
全部评论

相关推荐

joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务