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

八N皇后问题

1 问题的提出

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


我们的任务就是用MATLAB进行求解

2 数学模型的构建

首先我们分析题目就是
任意两个皇后都不能处于同一行、同一列或同一斜线上

global board sum;
board = zeros(8,8);
sum = 0;
dfs(1);
disp(sum);function dfs(x)global board sum;if x > 8sum = sum + 1;return;endfor i = 1:8if issafe(x,i,board)board(x,i) = 1;dfs(x+1);board(x,i) = 0;endend
endfunction safe = issafe(row, col, board)safe = true;% 检查列for i = 1:row-1if board(i, col) == 1safe = false;return;endend% 检查右上角i = row - 1;j = col + 1;while i >= 1 && j <= 8if board(i, j) == 1safe = false;return;endi = i - 1;j = j + 1;end% 检查左上角i = row - 1;j = col - 1;while i >= 1 && j >= 1if board(i, j) == 1safe = false;return;endi = i - 1;j = j - 1;end
end

我们要学习这里面的思想

3 模块1 dfs搜索函数

function dfs(x)global board sum;if x > 8sum = sum + 1;return;endfor i = 1:8if issafe(x,i,board)board(x,i) = 1;dfs(x+1);board(x,i) = 0;endend
end

我们有8个皇后,那就是for循环循环8行,每次放置一个棋子就进行一次判断,然后判断这个棋子可不可以落在这里如过可以那么久进入到下一行,x进行+1秒如果不可以的话,那么就进入这一行的下一个格子下一个,这就是枚举8行8列
当这个x > 8的话,那么就是放置成功了

4 检查模块

function safe = issafe(row, col, board)safe = true;% 检查列for i = 1:row-1if board(i, col) == 1safe = false;return;endend% 检查右上角i = row - 1;j = col + 1;while i >= 1 && j <= 8if board(i, j) == 1safe = false;return;endi = i - 1;j = j + 1;end% 检查左上角i = row - 1;j = col - 1;while i >= 1 && j >= 1if board(i, j) == 1safe = false;return;endi = i - 1;j = j - 1;end
end

首先我们的行是已经操作完的了,就是在判断行的话是在递归的过程中进行讨论的,然后就是只需要判断这个列是否成立就好了,然后斜边的话,那不就是直接判断左上角和右上角就好了
左上角和右上角的检查

    % 检查右上角i = row - 1;j = col + 1;while i >= 1 && j <= 8if board(i, j) == 1safe = false;return;endi = i - 1;j = j + 1;end

我们知道右上角就是不断的进行加1嘛,这个行的话,列就是不断地进行减1,左上角就是反着地

相关文章:

八N皇后问题

1 问题的提出 在8X8格的国际象棋上摆放八个皇后&#xff0c;使其不能互相攻击&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上&#xff0c;问有多少种摆法 我们的任务就是用MATLAB进行求解 2 数学模型的构建 首先我们分析题目就是 任意两个皇后都不能处于…...

TMS320F28388D使用sysconfig配置IPC

第1章 配置IPC底层代码 使用IPC的动机&#xff1a; 我计划我的项目中要使用RS485&#xff0c;CANFD通信和EtherCAT通信&#xff0c;由于通信种类较多&#xff0c;而对于电机控制来说大部分数据都是重复的&#xff0c;并且有些数据可以很久才改变一次&#xff0c;所以我计划使…...

代码训练LeetCode(19)轮转数组

代码训练(19)LeetCode之轮转数组 Author: Once Day Date: 2025年6月3日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09;力扣 (LeetCode) 全球极客挚爱的…...

每日算法 -【Swift 算法】将整数转换为罗马数字

&#x1f4a1; Swift&#xff1a;将整数转换为罗马数字&#xff08;含思路讲解与详细注释&#xff09; 罗马数字是一种古老的数字表示方式&#xff0c;虽然在现代我们不再使用它进行计算&#xff0c;但在表盘、章节、纪念碑等地方依然很常见。今天我们就来实现一个经典算法题&…...

Qwen与Llama分词器核心差异解析

Qwen和 Llama 词映射(分词器)的区别及通用词映射逻辑 一、Qwen 与 Llama 词映射(分词器)区别 维度Qwen 分词器Llama 分词器技术基础基于字节级别字节对编码(BBPE),以 cl100k 为基础词库,扩充中文字词、多语言词汇基于 BPE,但依赖 SentencePiece 单字模型,核心为英文优…...

华为云Flexus+DeepSeek征文 | 基于ModelArts Studio 与 Cline 快速构建AI编程助手

目录 一、前言 二、ModelArts Studio&#xff08;MaaS&#xff09;介绍与应用场景 2.1ModelArts Studio&#xff08;MaaS&#xff09;介绍 2.2 ModelArts Studio&#xff08;MaaS&#xff09;使用场景 2.3 开通MaaS服务 2.4 开通DeepSeek-V3商用服务 三、Cline简介和安装 3.1 C…...

pikachu靶场通关笔记11 XSS关卡07-XSS之关键字过滤绕过(三种方法渗透)

目录 一、源码分析 1、进入靶场 2、代码审计 3、攻击思路 二、渗透实战 1、探测过滤信息 2、注入Payload1 3、注入Payload2 4、注入Payload3 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关&#xff09;渗透集合&#xff0c;通过对XSS关卡源码的代码审计找到安…...

Android App引用vendor编写的jni动态库

简单描述一下&#xff0c;就是我自己基于FastDDS写了一个Jni的so&#xff0c;然后编写了jar包引用该so&#xff0c;最后写了一个Android的测试apk使用jar包&#xff0c;调用jni中的接口去创建Participant&#xff0c;Subscriber等。 实际将jni的so放到 /system_ext/lib64&#…...

React从基础入门到高级实战:React 核心技术 - 错误处理与错误边界:构建稳定的应用

React 错误处理与错误边界&#xff1a;构建稳定的应用 在开发 React 应用时&#xff0c;错误处理是确保应用稳定性和用户体验的重要环节。无论是运行时错误、API 请求失败还是用户操作失误&#xff0c;合理的错误处理机制都能防止应用崩溃&#xff0c;并为用户提供清晰友好的反…...

页面输入数据的表格字段(如 Web 表单或表格控件)与后台数据库进行交互时常用的两种方式

“从页面输入数据的表格字段(如 Web 表单或表格控件)在与后台数据库进行交互时,常用的有两种方式:” 🎯 两种方式(操作调用数据库、绑定数据) 🚀 方式1:前端代码提交数据到后端,再由后端调用数据库 💡 原理和逻辑: 用户在页面上(比如输入表单、表格)输入数据…...

碰一碰发视频-源码系统开发技术分享

#碰一碰营销系统# #碰一碰系统# #碰一碰发视频# 架构设计哲学&#xff1a;近场通信的优雅平衡 一、核心通信技术选型 1. 双模协同传输引擎 技术协议栈延迟控制适用场景NFCISO 14443-A<100ms精准触发场景BLE 5.0GATT Profile300-500ms中距传输场景 工程决策依据&…...

C++学习过程分享

空指针&#xff1a;int *p NULL; 空指针&#xff1a;指针变量指向内存中编号为0的空间&#xff1b;用途&#xff1a;初始化指针变量注意&#xff1a;空指针指向的内存不允许访问注意&#xff1a;内存编号为0-255为系统占用空间&#xff0c;不允许用户访问 野指针&#xff1a;…...

C语言 — 动态内存管理

目录 1.malloc和free函数1.1 malloc函数1.2 free函数1.3 malloc函数的使用 2.calloc函数2.1 calloc函数2.2 calloc函数的使用 3.realloc函数3.1 realloc函数3.2 realloc函数的使用 4.动态内存管理笔试题4.1 笔试题&#xff08;1&#xff09;4.2 笔试题&#xff08;2&#xff09…...

《TCP/IP 详解 卷1:协议》第5章:Internet协议

IPv4和IPv6头部 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP 数据都通过IP数据报传输。IP提供了一种尽力而为、无连接的数据报交付服务。 IP头部字段 IPv4 头部通常为 20 字节&#xff08;无选项时&#xff09;&#xff0c;而 IPv6 头部固定为 40 字节。IPv6 不…...

C#面向对象实践项目--贪吃蛇

目录 一、项目整体架构与核心逻辑 二、关键类的功能与关系 1. 游戏核心管理类&#xff1a;Game 2. 场景接口与基类 3. 具体场景类 4. 游戏元素类 5. 基础结构体与接口 三.类图 四、核心流程解析 五、项目可优化部分 一、项目整体架构与核心逻辑 该项目运用场景管理模…...

学习STC51单片机26(芯片为STC89C52RCRC)

每日一言 真正的强者&#xff0c;不是没有眼泪&#xff0c;而是含着泪依然奔跑。 硬件&#xff1a;4G模块 这个是接线原理&#xff0c;我们也只要知道这个4根线的连接就好了&#xff0c;我们也是连接到USB转TTL的模块上 要插卡哈......... 随后我们下载一个叫做亿佰特的调试助…...

Web前端为什么要打包?Webpack 和 Vite 如何助力现代开发?

一. 为什么要使用框架库? 1.1 传统网页与现代前端的差异 在最早期的网页开发中,我们只需要写几个.html文件,配上.css和.js文件,浏览器直接加载就能展现页面,每个文件都是独立的静态资源,简单且直观 但现在网站越来越复杂了: 需要用到最新的js语法(比如ES6)使用框架(Vue…...

Nginx详解(三):ngx_http_rewrite_module模块核心指令详解

概要&#xff1a; 在 Nginx 的众多功能模块中&#xff0c;ngx_http_rewrite_module是实现请求动态处理的核心组件&#xff0c;它通过一系列指令实现 URI 重写、条件判断、响应返回等功能。本文将以 CentOS 7.9 环境为例&#xff08;主机名www.a.com&#xff0c;IP 172.25.0.10…...

C++ 建造者模式:简单易懂的设计模式解析

一、引言 在软件开发中,我们经常会遇到一些复杂对象的创建过程,这些对象通常由多个部分组成,并且每个部分的构建过程可能非常复杂。建造者模式(Builder Pattern)就是为了解决这类问题而诞生的一种创建型设计模式。本文将以简单易懂的方式介绍C++中的建造者模式,帮助你理…...

【笔记】在 MSYS2(MINGW64)中正确安装 Poetry 的指南

#工作记录 在 MSYS2&#xff08;MINGW64&#xff09;中正确安装 Poetry 的指南 一、背景说明 在 MSYS2&#xff08;MINGW64&#xff09;环境中&#xff0c;即使已经安装了 pip&#xff0c;也不建议直接使用 pip install poetry 来安装 Poetry。 这是因为 MSYS2 使用自己的包…...

IDEA项目推送到远程仓库

打开IDEA——>VCS——>Creat Git 选择项目 push提交到本地 创建远程仓库 复制地址 定义远程仓库 推送 推送成功...

DeepSeek 赋能 NFT:数字艺术创作与交易的革新密码

目录 一、NFT&#xff1a;数字世界的独特资产1.1 NFT 的定义与本质1.2 NFT 的价值支撑1.3 NFT 的丰富类型 二、DeepSeek&#xff1a;AI 领域的创新力量2.1 DeepSeek 的发展历程与成就2.2 DeepSeek 的核心技术与能力 三、DeepSeek 在 NFT 创作中的神奇应用3.1 高效生成数字艺术作…...

【后端架构师的发展路线】

后端架构师的发展路线是从基础开发到技术领导的系统性进阶过程&#xff0c;需融合技术深度、架构思维和业务洞察力。以下是基于行业实践的职业发展路径和关键能力模型&#xff1a; 一、职业发展阶梯‌ 初级工程师&#xff08;1-3年&#xff09;‌ 核心能力‌&#xff1a;掌…...

matlab/simulink TLC语法基础练习实例

一、基本语法测试方法 1.新建一个脚本&#xff0c;保存扩展名为tlc,本例中是tst.tlc&#xff0c;设置当前工作路径为保存的tlc文件路径&#xff0c;在tlc文件里面输入下面的代码&#xff0c;然后保存&#xff1a; %warning test 2.在MATLAB的命令窗口输入&#xff1a; tlc …...

MAU算法流程理解

参考文献&#xff1a;湘江船闸的过闸调度算法研究(李 楠&#xff0c;李桂华&#xff0c;尹剑平) &#xff08;湖南湘江航运建设开发有限公司&#xff0c;湖南 长沙 410011&#xff09; MAU算法流程 图4展示的是一种船舶排档算法&#xff08;MAU算法&#xff09;&#xff0c;它…...

蓝桥杯国赛训练 day1

目录 k倍区间 舞狮 交换瓶子 k倍区间 取模后算组合数就行 import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {solve();}public static vo…...

ESP32之Linux编译环境搭建流程

背景&#xff1a;为了解决 “windows环境中编译ESP32代码速度慢” 的问题&#xff0c;现搭建一个Linux环境&#xff0c;让windows下的VScode连接到Linux环境&#xff0c;VSCode负责编辑代码&#xff0c;虚拟机用于编译代码。 目录 一、安装VMware 1.1 获取VMware安装包 1.2…...

Linux 软件安装方式全解(适用于 CentOS/RHEL 系统)

&#x1f427; Linux 软件安装方式全解&#xff08;适用于 CentOS/RHEL 系统&#xff09; 在 Linux 系统中&#xff0c;软件安装方式丰富多样&#xff0c;常见于以下几种方式&#xff1a; 安装方式命令/工具说明软件包管理器&#xff08;推荐&#xff09;yum, dnf, apt, zypp…...

QT- QML Layout+anchors 布局+锚点实现窗口部件权重比例分配

布局管理 简单比较两种界面管理锚点布局实现比例布局布局管理实现比例布局循环依赖问题简谈 在日常打螺丝中&#xff0c;我们偶尔会需要实现界面各组件能按比例放置&#xff0c;自适应各种分辨率的需求。我用锚点和布局都实现过相关界面&#xff0c;记录下来两种方式实现的差异…...

UE5打包项目设置Project Settings(打包widows exe安装包)

UE5打包项目Project Settings Edit-Project Settings- Packaging-Ini Section Denylist-Advanced 1&#xff1a;打包 2&#xff1a;高级设置 3&#xff1a;勾选创建压缩包 4&#xff1a;添加要打包地图Map的数量 5&#xff1a;选择要打包的地图Maps 6&#xff1a;Project-Bui…...