当前位置: 首页 > news >正文

头歌资源库(32)n皇后问题

一、 问题描述 

二、算法思想  

这是一个典型的回溯问题,可以使用递归的方式求解。具体的算法思想如下:

  1. 定义一个长度为n的一维数组cols,用来存储每行皇后所在的列号。例如,cols[i]表示第i行皇后所在的列号。

  2. 从第一行开始,依次尝试在每一列放置皇后。对于当前行i,遍历每一列j,判断当前位置是否合法。合法的条件是:当前位置不在已有皇后的同一列、同一对角线上。如果合法,则将当前位置的列号存储到cols[i]中,并继续递归放置下一行的皇后。

  3. 递归的终止条件是当所有行的皇后都放置完毕时,方案数加一。

  4. 在递归过程中,如果到达某一行i时,无法找到合法的位置放置皇后,则回溯到上一行 (i-1),并继续尝试下一列。

  5. 最终返回方案数。

三、代码实现   

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>int count = 0;// 检查当前位置是否安全
bool isSafe(int board[], int row, int col, int n) {for (int i = 0; i < row; i++) {// 检查列冲突和对角线冲突if (board[i] == col || abs(board[i] - col) == abs(i - row)) {return false;}}return true;
}// 回溯算法
void solveNQueens(int board[], int row, int n) {if (row == n) {count++;return;}for (int col = 0; col < n; col++) {if (isSafe(board, row, col, n)) {board[row] = col; // 放置皇后solveNQueens(board, row + 1, n);// 回溯board[row] = -1;}}
}int main() {int n;scanf("%d", &n);int board[n];for (int i = 0; i < n; i++) {board[i] = -1; // 初始化棋盘}solveNQueens(board, 0, n);printf("%d\n", count);return 0;
}

执行结果   

 结语   

生命只有一次

你的任务就是竭尽全力活的精彩

活出自己,不留遗憾

!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【坑】微信小程序开发wx.uploadFile和wx.request的返回值格式不同
  • 如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批
  • Docker Compose部署Kafka集群并在宿主机Windows连接开发
  • 对AAC解码的理解
  • Linux C++ 054-设计模式之外观模式
  • leetcode日记(38)字母异位词分组
  • C++数组
  • 【密码学】消息认证
  • 九、Linux二进制安装ElasticSearch集群
  • 【JavaScript】解决 JavaScript 语言报错:Uncaught SyntaxError: Unexpected token
  • Qt QWebSocket网络编程
  • Nginx -Web服务器/反向代理/负载均衡
  • Selenium WebDriver中的显式等待与隐式等待:深入理解与应用
  • LabVIEW学习-LabVIEW储存Excel表格
  • 新版k8s拉取镜像失败问题
  • [笔记] php常见简单功能及函数
  • 【翻译】babel对TC39装饰器草案的实现
  • 【刷算法】从上往下打印二叉树
  • Bootstrap JS插件Alert源码分析
  • Brief introduction of how to 'Call, Apply and Bind'
  • centos安装java运行环境jdk+tomcat
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • python3 使用 asyncio 代替线程
  • rabbitmq延迟消息示例
  • Vue 动态创建 component
  • 初识 webpack
  • 对超线程几个不同角度的解释
  • 番外篇1:在Windows环境下安装JDK
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 利用DataURL技术在网页上显示图片
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 区块链分支循环
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 突破自己的技术思维
  • 微信开放平台全网发布【失败】的几点排查方法
  • 小李飞刀:SQL题目刷起来!
  • raise 与 raise ... from 的区别
  • ​马来语翻译中文去哪比较好?
  • (~_~)
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (C11) 泛型表达式
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (十) 初识 Docker file
  • (四)库存超卖案例实战——优化redis分布式锁
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段