首页 > 其他 > 详细

N皇后问题

时间:2021-03-06 10:41:20      阅读:30      评论:0      收藏:0      [点我收藏+]

模板:

#include<bits/stdc++.h>
using namespace std;
const int maxn=10;
int a[maxn];//a[i]表示第i行上的皇后放于a[i]列上,假设a[3]=7:放在第3行第7列上
int cnt=0,n;
bool check(int x,int y){
    for(int i=1;i<=x;i++){
        if(a[i]==y){//如果该列已经放置过皇后,就false
            return false;
        }
        if(i+a[i]==x+y){//上对角线,和相等
            return false;
        }
        if(i-a[i]==x-y){//下对角线,差相等
            return false;
        }
    }
    return true;
}
void dfs(int row){
    if(row==n+1){
        cnt++;
        return ;
    }
    for(int i=1;i<=n;i++){
        if(check(row,i)){
            a[row]=i;
            dfs(row+1);//递归到头,遍历了一遍,找到了一个解
            a[row]=0;//回收,便于找下一组解
        }
    }
}
int main(){
    cin>>n;
    dfs(1);
    cout<<cnt<<endl;
    return 0;
}

//输入:8
//输出:92

 

N皇后问题

原文:https://www.cnblogs.com/dreamzj/p/14489227.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!