n皇后问题

简介: n皇后问题

在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

典型的回溯法问题

思路:

尝试性的放置 ,从第一行开始,接着在下一行放置,(这里的好处就是不需要考虑行了,只需要考虑列和对角线)
一直纠结第一行的问题,代码中直接传参数为0,一直好奇如何控制第一行的列的变化,后来将0自己模拟走了一遍才明白。
注意判断的是否符合规则的公式:(列==列)(abs(列-列)==abs(行-行))
具体细节见注释(仔细阅读,一定能看懂,)
#include<iostream>
#include <math.h>
#define N 8
using namespace std;
int num=0;//用来记录总的放置个数
int cur[8];//此全局变量是用来记录第i行放在得第j列,其中下标为i,值为j
int check(int n){//传进来行
    for(int i=0;i<n;i++){
        if(cur[i]==cur[n]||abs(n-i)==abs(cur[n]-cur[i])){//判断当前放置的位置是否与之前的放置位置是否在同一列或同斜列
            return 0;
        }
    }
    return 1;
}
void putQueen(int n){
    if(n==N){//如果找到了最后一行的下一行,那么就可以将次数+1了(就是之前把所有的行已经放完了,数组下标从0开始的勿忘)
        num++;
    }else{
        for(int j=0;j<N;j++){//列的位置从0往最后放置
            cur[n]=j;//记录下当前行的当前列
            if(check(n)){//判断当前放置的行列是否合适
                putQueen(n+1);//开始进行下一行的放置
            }
        }
    }
}
int main(){
    putQueen(0);
    cout<<num;
    return 0;
}

相关文章
|
算法 C++
48天C++笔试强训 001(下)
48天C++笔试强训 001(下)
76 1
|
3月前
|
Ubuntu Linux 数据安全/隐私保护
修复Ubuntu 18.04终端无法启动的问题
经过这一系列动作,如果终端还是藏匿不出,那它可能被数字世界的某个角落困住了。但概率比较小。大多数情况下,按照上面的修复步骤,你的 Ubuntu 18.04 终端应该能恢复健康。当然,这些攻略仅相当于一把解开问题的钥匙,并非覆盖所有情况。如果还有坎儿,可能需要深入探查,或者寻求社区的力量。别忘了,团结就是力量,绝大多数问题都不是单枪匹马能解决的。
216 27
|
5月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
747 1
|
数据采集 SQL 安全
Minerva -- Airbnb 的大规模数据指标系统 Part 1
Minerva -- Airbnb 的大规模数据指标系统 Part 1
1156 0
Minerva -- Airbnb 的大规模数据指标系统 Part 1
|
机器学习/深度学习 人工智能 并行计算
人工智能|Mamba 介绍
人工智能|Mamba 介绍
|
前端开发 搜索推荐 JavaScript
未来十年,前端开发的变革与挑战
在未来十年,前端开发将面临着一系列的变革和挑战。随着移动设备的普及、人工智能技术的不断进步以及新型互联网应用的涌现,前端开发将以全新的方式应对日益增长的用户需求和技术要求。本文将探讨前端开发可能面临的变革,并提出应对挑战的策略。
|
监控 安全 Go
【Go语言专栏】Go语言中的并发性能分析与优化
【4月更文挑战第30天】Go语言以其卓越的并发性能和简洁语法著称,通过goroutines和channels实现并发。并发性能分析旨在解决竞态条件、死锁和资源争用等问题,以提升多核环境下的程序效率。使用pprof等工具可检测性能瓶颈,优化策略包括减少锁范围、使用无锁数据结构、控制goroutines数量、应用worker pool和优化channel使用。理解并发模型和合理利用并发原语是编写高效并发代码的关键。
189 0
|
前端开发 测试技术 Linux
芯片人的快乐——python+systemverilog用波形祝你新春快乐 |献上祝福语波形生成器|
芯片人的快乐——python+systemverilog用波形祝你新春快乐 |献上祝福语波形生成器|
168 0
|
JavaScript 前端开发 API
Vue + Flask 实现单页面应用
Vue + Flask 实现单页面应用
141 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的在线家具商城附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的在线家具商城附带文章源码部署视频讲解等
95 1

热门文章

最新文章