OpenJudge | 八皇后问题

news/2024/9/19 17:45:25/ 标签: c++, 算法, 开发语言, 数据结构, OpenJudge

总时间限制: 10000ms 内存限制: 65536kB

描述

在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。

输入

无输入。
输出
按给定顺序和格式输出所有八皇后问题的解(见Sample Output)。

样例输入

(null)

样例输出

No. 1
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 1 0 0 0 0 0 
No. 2
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
0 0 1 0 0 0 0 0 
No. 3
1 0 0 0 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 1 
0 0 1 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 
0 1 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
No. 4
1 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 0 0 1 
0 0 0 0 0 1 0 0 
0 0 1 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 1 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 
No. 5
0 0 0 0 0 1 0 0 
1 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
0 1 0 0 0 0 0 0 
0 0 0 0 0 0 0 1 
0 0 1 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 1 0 0 0 0 
No. 6
0 0 0 1 0 0 0 0 
1 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 1 0 0 0 0 0 
0 0 0 0 0 1 0 0 
No. 7
0 0 0 0 1 0 0 0 
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 1 
0 0 0 1 0 0 0 0 
0 1 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 1 0 0 0 0 0 
0 0 0 0 0 1 0 0 
No. 8
0 0 1 0 0 0 0 0 
1 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 0 0 1 0 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
No. 9
0 0 0 0 1 0 0 0 
1 0 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 1 
0 1 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 
0 0 1 0 0 0 0 0 
...以下省略

提示

此题可使用函数递归调用的方法求解。

来源

计算概论05

解析

何为八皇后

八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。

突破口

任两个皇后都不能处于同一条横行、纵行或斜线上

  1. 同一行和同一列两者总有一个是不会重复的,看你以什么作为递归的传入条件。
  2. 困难点在与斜线上——所谓斜线上,包括以上一个皇后所在的位置为交点 k = 1 k=1 k=1 k = − 1 k=-1 k=1这两条斜线。
    其中, k = 1 k=1 k=1的斜线可用 y 1 − x 1 = y 2 − x 2 y_1-x_1 = y_2-x_2 y1x1=y2x2来判断, k = − 1 k=-1 k=1的斜线可用 y 1 + x 1 = y 2 + x 2 y_1+x_1 = y_2+x_2 y1+x1=y2+x2来判断

Code

#include <bits/stdc++.h>
using namespace std;array<pair<int, int>, 8> record = {};
array<int, 8> yR = {0};
array<array<bool, 8>, 8> res;bool judge(int x, int y) {if(yR[y] == 1) return false;for(int i = 0; i < x; i++) {if(record[i].first - record[i].second == x - y) return false;}for(int i = 0; i < x; i++) {if(record[i].first + record[i].second == x + y) return false;}return true;
}void dfs(int x, int *count) {if(x >= 8) {printf("No. %d\n", ++(*count));for(int i = 0; i < 8; ++i) {for(int j = 0; j < 8; ++j) {printf("%d ", res[i][j]);}printf("\n");}return;}for(int y = 0; y < 8; ++y) {if(judge(x, y) == 0) continue;record[x].first = x;record[x].second = y;res[y][x] = 1;yR[y] = 1;dfs(x+1, count);res[y][x] = 0;yR[y] = 0;}}int main() {int count = 0;for(int i = 0; i < 8; i++) {res[i].fill(0);}	dfs(0, &count);
}

鸣谢

连烟的递归从入门到精通

4. DFS、回溯算法(26分钟)


http://www.ppmy.cn/news/1526866.html

相关文章

云原生和非云原生哪个好?六大区别详细对比

云原生和非云原生哪个好&#xff1f;云原生和非云原生各有优劣&#xff0c;具体选择取决于应用场景。云原生利用云计算的优势&#xff0c;通过微服务、容器化和自动化运维等技术&#xff0c;提高了应用的可扩展性、更新速度和成本效益。非云原生则可能更适合对延迟敏感或不需要…

链动321模式小程序开发源码

链动31模式概述 链动31模式是一种基于技术的新型商业模式&#xff0c;它通过激励用户分享和推广&#xff0c;实现用户、企业和平台的共赢。该模式通常涉及商品展示、积分系统、分享推广和排行榜等功能&#xff0c;旨在通过用户之间的社交裂变来扩大销售和品牌影响力。如何开发这…

java-lambda-常用方法总结汇总

1、获取对象集合中的一个字段生成新的集合&#xff0c;【List<BeanA> 转 List<Long>&#xff0c;List<BeanA> 转 Set<Long>&#xff0c;List<BeanA> 转 String】 //查询结果 List<MnsBusinessMessageVO> list businessMessageMapper.list…

【STM32】esp8266连接wifi

1.配置stm32cubemx 使用串口二接收esp8266的数据&#xff0c;单片机接收&#xff0c;使用串口1将数据发送给串口助手 串口2波特率设置74880&#xff0c;串口1设置115200 在初始化的时候需要将复位引脚拉低20ms,然后再拉高20ms, 设置GPIOB的输出模式 对PB12做输出处理 2.…

重生归来之挖掘stm32底层知识(1)——寄存器

概念理解 要使用stm32首先要知道什么是引脚和寄存器。 如下图所示&#xff0c;芯片通过这些金属丝与电路板连接&#xff0c;这些金属丝叫做引脚。一般做软件开发是不需要了解芯片是怎么焊的&#xff0c;只要会使用就行。我们平常通过编程来控制这些引脚的输入和输出&#xff0c…

YOLOv8和YOLOv10的参数解释

文章目录 文件位置在/ultics/cfg/default.yaml 这段配置文件用于 Ultralytics YOLO 模型的训练、验证、预测和导出等操作。以下是每个参数的作用及其用途&#xff1a;task: detect # 指定YOLO的任务类型&#xff0c;如检测&#xff08;detect&#xff09;、分割&#xff08;seg…

商标申请注册加字加成通用词等于没加!

以前普推知产商标曾分析过“东方甄选”火遍全网后&#xff0c;许多人申请注册商标都喜欢加“甄选”&#xff0c;但是“甄选”基本属于通用词了&#xff0c;加“甄选”后还是属于前面那个词。 近期看到有人加“心选”&#xff0c;甄选&#xff0c;优选&#xff0c;心选等还都是选…

基于深度学习的图像分类或识别系统(含全套项目+PyQt5界面)

目录 一、项目界面 二、代码实现 1、网络代码 2、训练代码 3、评估代码 4、结果显示 三、项目代码 一、项目界面 二、代码实现 1、网络代码 该网络基于残差模型修改 import torch import torch.nn as nn import torchvision.models as modelsclass resnet18(nn.Modul…

C++ | Leetcode C++题解之第409题最长回文串

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestPalindrome(string s) {unordered_map<char, int> count;int ans 0;for (char c : s)count[c];for (auto p : count) {int v p.second;ans v / 2 * 2;if (v % 2 1 and ans % 2 0)ans;}retur…

深度学习速通系列:依存分析

依存分析&#xff08;Dependency Parsing&#xff09;是自然语言处理&#xff08;NLP&#xff09;中的一项任务&#xff0c;目的是确定句子中单词之间的依存关系&#xff0c;并将这些关系表示为一个有向图&#xff0c;通常称为依存树。在依存树中&#xff0c;每个节点代表一个单…

电脑安装OpenWRT系统

通过网盘分享的文件&#xff1a;OpenWRT 链接: https://pan.baidu.com/s/1nrRBeKgGviD31Omji480qA?pwd9900 提取码: 9900 下面开始教程&#xff1a; 1.先把普通U盘制作成一个PE启动盘&#xff0c;我用的是微PE工具箱&#xff0c;直接安装PE到U盘。 2.把写盘工具和openWRT系统…

高级java每日一道面试题-2024年9月13日-基础篇-如何测试事务的正确性?

如果有遗漏,评论区告诉我进行补充 面试官: 如何测试事务的正确性&#xff1f; 我回答: 在Java高级面试中&#xff0c;测试事务的正确性是一个重要的话题&#xff0c;因为事务管理对于确保数据的一致性和完整性至关重要。事务的正确性测试通常涉及多个方面&#xff0c;包括原…

linux-系统备份与恢复-系统恢复

Linux 系统备份与恢复&#xff1a;系统恢复 1. 概述 Linux 系统的恢复是系统管理的重要组成部分&#xff0c;它指的是在系统崩溃、硬件故障、误操作或安全问题后&#xff0c;恢复系统到可用状态的过程。良好的系统恢复计划可以有效避免数据丢失和业务中断&#xff0c;并确保系…

初中生物--4.生物体的结构层次(二)

一、植物体的结构层次 1.绿色开花植物的六大器官 根、茎、叶、花、种子、果实 2.植物的组织 3.植物体的生长 植物体的生长是细胞分裂、生长和分化的综合结果。在植物体的生长过程中&#xff0c;细胞不断分裂产生新的细胞&#xff0c;新细胞不断生长使细胞体积增大&#xff…

Ubuntu搭建FTP服务器

1. 首先&#xff0c;我们需要安装和配置xinetd&#xff0c;安装的具体命令如下&#xff1a; sudo apt-get install xinetd 2. 新建tftp工作目录&#xff0c;并添加读、写、执行权限&#xff08;没有权限后面无法正常访问该文件夹&#xff09;&#xff0c;如下图所示。 3. 安装…

【PCB工艺】表面贴装技术中常见错误

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 1、什么是SMT和SMD2、表面贴装技术的优势是什么&#xff1f;3、通孔和表面贴装技术之间的区别是什么&#xff1f;4、焊…

28. 消息队列使用场景

1. 前言 除了计算机网络、操作系统等基础知识的考察,各种流行的中间件也深受面试官的青睐。之前的章节已经对缓存中间件的代表 Redis 的面试题进行了分析,本章节将介绍常用的消息中间件,即 RabbitMQ 的基础定义以及使用原因。 2. 消息队列使用场景 面试官提问: 为什么要使…

Datawhale------Tiny-universe学习笔记——Qwen(1)

1. Qwen整体介绍 对于一个完全没接触过大模型的小白来说&#xff0c;猛一听这个名字首先会一懵&#xff1a;Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍&#xff1a;Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展&a…

【JAVA开源】基于Vue和SpringBoot的在线旅游网站

本文项目编号 T 025 &#xff0c;文末自助获取源码 \color{red}{T025&#xff0c;文末自助获取源码} T025&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

深入探索C/C++中的字符串处理:strcmp与strcat的奥秘

引言 在C语言的广阔天地中&#xff0c;字符串处理是一项基础而又至关重要的技能。字符串作为程序中最常用的数据类型之一&#xff0c;其操作直接影响到程序的效率和安全性。在众多字符串处理函数中&#xff0c;strcmp和strcat无疑是两个最为经典且常用的函数。它们分别用于字符…