Peter算法小课堂—八皇后问题

独立集问题:安排互不冲突的个体

四个斜眼枪手

bool valid(int x,int y){for(int i=1;i<=min(x,y);i++)if(f[x-i][y-i]) return 0;for(int i=1;i<=min(x,N-1-y);i++)if(f[x-i][y+i]) return 0;return 1;
}

void dfs(int x,int y,int c){if(c==GUNS){ans++;print();return;}if(x==N) return;int nx=(y==N-1?x+1:x);//计算下一格 int ny=(y==N-1?0:y+1);if(valid(x,y)){//判断(x,y)是否能放新的枪手 f[x][y]=1;dfs(nx,ny,c+1);//从(nx,ny)继续枚举,已经放了c+1个枪手 f[x][y]=0;}dfs(nx,ny,c);//(nx,ny)继续枚举,已经放了c个枪手 
}

大家看我注释就看懂了, 此处略去100字……

其实我们可以对他进行剪枝,也就是if((N-1-x)*N+(N-y)+c<=GUNS) return;

八皇后问题

这个问题有两种算法:1、逐格放置 2、逐行放置

逐格放置

和“四个斜眼枪手”差不多

void dfs(int x,int y,int c){if(c==GUNS){ans++;print();return;}if(x==N) return;if((N-1-x)*N+(N-y)+c<=GUNS) return;int nx=(y==N-1?x+1:x);int ny=(y==N-1?0:y+1);if(valid(x,y)){f[x][y]=1;dfs(nx,ny,c+1);f[x][y]=0;}dfs(nx,ny,c);
}
bool valid(int x,int y){for(int i=1;i<=min(x,y);i++)if(f[x-i][y-i]) return 0;for(int i=1;i<=min(x,N-1-y);i++)if(f[x-i][y+i]) return 0;for(int i=0;i<x;i++)if(f[i][y]) return 0;for(int i=0;i<y;i++)if(f[x][i]) return 0;return 1;
}

逐行放置

bool valid(int x,int y){return !clmn[y]&&!d1[x+y]&&!d2[x-y+N-1];
}

为什么呢?我亲自给大家画了三张图,如下

  然后再来看dfs函数

void dfs(int x,int y,int c){if(x==N){ans++;print();return;}for(int y=0;y<N;y++)if(valid(x,y)){f[x][y]=clmn[y]=d1[x+y]=d2[x-y+N-1];dfs(x+1);f[x][y]=clmn[y]=d1[x+y]=d2[x-y+N-1];}
}

希望这些对大家有用,三联必回

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

淘宝天猫1688以图搜图接口,按图搜索商品,API接口调用展示(拍立淘API)

淘宝拍立淘图片搜索接口技术主要基于图像识别和内容匹配。图像识别是利用计算机视觉技术&#xff0c;对上传的图片进行特征提取和识别&#xff0c;从而找到与该图片相似的商品。内容匹配则是通过文本与图片内容的关联性&#xff0c;对商品标题、描述等信息进行匹配&#xff0c;…

Bard和ChatGPT的一些比较

Bard和ChatGPT的一些比较 2023.11.8版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 选择正确的自动文本生成工具对企业至关重要。本文将详细分析谷歌 Bard 和 ChatGPT 的优缺点&#xff0c;以帮助企业做出明智的选择。无论企业关注的是客…

django|报错SQLite 3.8.3 or later is required的解决方案

迁移原同事写的程序&#xff0c;到新服务器上边。运行报错。解决方案有三种 降低django版本升级sqlite3&#xff0c;不低于3.8.3版本修改django源码 方案一、降低django版本 卸载高版本django pip uninstall django安装低版本&#xff0c;如 pip install django2.1.7注意&…

asp.net core 获取服务实例的几种方式

在ASP.NET Core中&#xff0c;我们可以使用以下几种方式来获取服务&#xff1a; 构造函数注入&#xff08;Constructor Injection&#xff09;&#xff1a;在需要使用服务的类的构造函数中声明对应的服务类型参数&#xff0c;ASP.NET Core会自动将对应的服务实例注入进来。例如…

贝锐蒲公英智慧运维方案:实现远程网络监控、管理、维护工业设备

为了提升运维效率&#xff0c;能够及时发现和响应设备的故障、异常和潜在问题。 越来越多的企业都在搭建“集中式”的远程智慧运维体系&#xff0c;以提高运维效率和降低成本。 但是&#xff0c;受限于网络&#xff0c;将不同地域的资源和信息进行整合&#xff0c;实现统一管理…

招聘信息采集

首先&#xff0c;我们需要使用PHP的curl库来发送HTTP请求。以下是一个基本的示例&#xff1a; <?php // 初始化curl $ch curl_init();// 设置代理 curl_setopt($ch, CURLOPT_PROXY, "jshk.com.cn");// 设置URL curl_setopt($ch, CURLOPT_URL, "http://www…

linuxC语言缓冲区及小程序的实现

文章目录 1.文件缓冲区1.1介绍1.2缓冲文件系统1.3冲刷函数fflush1.4认识linux下的缓冲区 2.linux小程序的实现2.1 回车\r和换行\n2.2倒计时程序2.3进度条小程序sleep/usleep代码运行结果 1.文件缓冲区 1.1介绍 为缓和 CPU 与 I/O 设备之间速度不匹配&#xff0c;文件缓冲区用以…

2023最新版本 从零基础入门C++与QT(学习笔记) -1- C++输入与输出

&#x1f38f;说在前面 &#x1f388;我预计是使用两个月的时间玩转C与QT &#x1f388;所以这是一篇学习笔记 &#x1f388;根据学习的效率可能提前完成学习,加油&#xff01;&#xff01;&#xff01; 输入(代码如下方代码块) &#x1f384;分析一下构成 &#x1f388;…

HTML页面模拟了一个类似Excel的表格在线diy修改表格内容

html实现在线表格编辑&#xff0c;可以修改每个表格内容&#xff0c;并且可以添加行和列 这个HTML页面模拟了一个类似Excel的表格&#xff0c;可以添加和删除行和列&#xff0c;并且可以编辑每个表格的内容。通过点击按钮可以添加新的行和列&#xff0c;通过按钮可以删除最后一…

力扣第583题 两个字符串的删除操作 c++ 动态规划 附Java代码

题目 583. 两个字符串的删除操作 中等 相关标签 字符串 动态规划 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 &q…

机器学习模型超参数优化最常用的5个工具包!

优化超参数始终是确保模型性能最佳的关键任务。通常&#xff0c;网格搜索、随机搜索和贝叶斯优化等技术是主要使用的方法。 今天分享几个常用于模型超参数优化的 Python 工具包&#xff0c;如下所示&#xff1a; scikit-learn&#xff1a;使用在指定参数值上进行的网格搜索或…

关灯游戏及扩展

7.8 图形界面应用案例——关灯游戏 题目&#xff1a; [案例]游戏初步——关灯游戏。 关灯游戏是很有意思的益智游戏&#xff0c;玩家通过单击关掉(或打开)一盏灯。如果关(掉&#xff08;或打开)一个电灯&#xff0c;其周围(上下左右)的电灯也会触及开关&#xff0c;成…

JSON可视化管理工具JSON Hero

本文软件由网友 zxc 推荐&#xff1b; 什么是 JSON Hero &#xff1f; JSON Hero 是一个简单实用的 JSON 工具&#xff0c;通过简介美观的 UI 及增强的额外功能&#xff0c;使得阅读和理解 JSON 文档变得更容易、直观。 主要功能 支持多种视图以便查看 JSON&#xff1a;列视图…

css:clip元素裁剪实现Loading加载效果边框

clip 属性定义了元素的哪一部分是可见的。clip 属性只适用于 position:absolute 的元素。 警告&#xff1a; 这个属性已被废弃。建议使用 clip-path 文档 https://developer.mozilla.org/zh-CN/docs/Web/CSS/cliphttps://developer.mozilla.org/zh-CN/docs/Web/CSS/clip-path …

liunx系统目录结构

列出目录 ls -l bin 二进制文件 boot 启动liunx的一些核心文件 dev 外部设备liunx的 etc 存放系统管理的配置文件和子目录都在这里面 home 家目录 lib 动态链接库 windows中的dll lostfound 一般为空 非法关机 存放文件 media 自带识别设备 识别挂载…

Linux安装MySQL8.0服务

Linux安装MySQL8.0服务 文章目录 Linux安装MySQL8.0服务一、卸载1.1 查看mariadb1.2 卸载 二、安装2.1 下载2.2 上传2.3 解压2.4 重命名2.5 删除2.6 创建目录2.7 环境变量2.8 修改配置2.9 配置文件2.9 用户与用户组2.10 初始化2.11 其它 三、开启远程连接MySQL 一、卸载 首先第…

安卓常见设计模式10------责任链模式(Kotlin版)

1. W1 是什么&#xff0c;什么是责任链模式&#xff1f;​ 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于将请求的发送者和接收者解耦&#xff0c;并将请求沿着一个处理链进行传递&#xff0c;直到有一个处理者能…

Hive 知识点八股文记录 ——(二)优化

函数 UDF&#xff1a;用户定义函数 UDAF&#xff1a;用户定义聚集函数 UDTF&#xff1a;用户定义表生成函数 建表优化 分区建桶 创建表时指定分区字段 PARTITIONED BY (date string)指定分桶字段和数量 CLUSTERED BY (id) INTO 10 BUCKETS插入数据按分区、分桶字段插入 …

【数据结构】树与二叉树(八):二叉树的中序遍历(非递归算法NIO)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

【postgresql】CentOS7 安装pgAdmin 4

CentOS7 安装PostgreSQL Web管理工具pgAdmin 4。 pgAdmin 是世界上最先进的开源数据库 PostgreSQL 最受欢迎且功能丰富的开源管理和开发平台。 下载地址&#xff1a; pgadmin-4 download pgAdmin 4分为桌面版和服务器版。 我们这里部署服务器版本。 安装RPM包。 安装源 s…