【洛谷 P1219】[USACO1.5]八皇后 Checker Challenge 题解(深度优先搜索+回溯法)

news2025/7/20 21:38:40

[USACO1.5]八皇后 Checker Challenge

题目描述

一个如下的 6 × 6 6 \times 6 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。

上面的布局可以用序列 2   4   6   1   3   5 2\ 4\ 6\ 1\ 3\ 5 2 4 6 1 3 5 来描述,第 i i i 个数字表示在第 i i i 行的相应位置有一个棋子,如下:

行号 1   2   3   4   5   6 1\ 2\ 3\ 4\ 5\ 6 1 2 3 4 5 6

列号 2   4   6   1   3   5 2\ 4\ 6\ 1\ 3\ 5 2 4 6 1 3 5

这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。
并把它们以上面的序列方法输出,解按字典顺序排列。
请输出前 3 3 3 个解。最后一行是解的总个数。

输入格式

一行一个正整数 n n n,表示棋盘是 n × n n \times n n×n 大小的。

输出格式

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。

样例 #1

样例输入 #1

6

样例输出 #1

2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4

提示

【数据范围】
对于 100 % 100\% 100% 的数据, 6 ≤ n ≤ 13 6 \le n \le 13 6n13

题目翻译来自NOCOW。

USACO Training Section 1.5

思路

用棋子的坐标转换得到棋子所在的对角线编号,每个棋子占据一条主对角线和一条副对角线,下一个棋子不能放在已被占据的对角线上。

AC代码

#include <iostream>
#include <cstring>
#define ms(a) memset(a, 0, sizeof(a))
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 1005;

int n;
int a[maxn];
bool b[maxn], diag1[maxn], diag2[maxn];
int cnt = 0;

void dfs(int x)
{
    if (n == x)
    {
        cnt++;
        if(4 > cnt){

            for (int i = 0; i < n; i++)
            {
                cout << a[i] << " ";
            }
            cout << endl;
        }
    }
    for (int i = 1; i <= n; i++)
    {
        int d1 = n - x + i;
        int d2 = x + i;
        if (!b[i] && !diag1[d1] && !diag2[d2])
        {
            b[i] = 1;
            diag1[d1] = 1;
            diag2[d2] = 1;
            a[x] = i;
            dfs(x + 1);
            b[i] = 0;
            diag1[d1] = 0;
            diag2[d2] = 0;
        }
    }
}

int main()
{
    ms(a);
    ms(b);
    ms(diag1);
    ms(diag2);
    cin >> n;
    dfs(0);
    cout << cnt << endl;
    return 0;
}

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

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

相关文章

13_MySQL中的约束

目录 1. 约束(constraint)概述 1.1 为什么需要约束 1.2 什么是约束 1.3 约束的分类 2. 非空约束 2.1 作用 2.2 关键字 2.3 特点 2.4 添加非空约束 2.5 删除非空约束 3. 唯一性约束 3.1作用 3.2 关键字 3.3 特点 3.5 关于复合唯一约束 4. 主键(PRIMARY KEY)约束 4.1 作用 4.2 关…

【Django】Hello,DJango!

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

如何实现报表可视化,有没有工具推荐

随着数据量的不断增长&#xff0c;如何更好地进行数据分析和可视化已成为企业和组织面临的重要挑战。实现报表可视化是一个很好的解决方案&#xff0c;它可以帮助用户更好地理解和分析数据&#xff0c;发现趋势和模式&#xff0c;并支持数据驱动的决策。本文将介绍如何实现报表…

现代卷积神经网络(NiN),并使用NIN训练CIFAR10的分类

专栏&#xff1a;神经网络复现目录 本章介绍的是现代神经网络的结构和复现&#xff0c;包括深度卷积神经网络&#xff08;AlexNet&#xff09;&#xff0c;VGG&#xff0c;NiN&#xff0c;GoogleNet&#xff0c;残差网络&#xff08;ResNet&#xff09;&#xff0c;稠密连接网络…

【3.7】Redis数据类型、CPU缓存一致性、哈希表

文章目录数据类型篇StringListHashSetZsetBitMapHyperLogLogGEOStreamCPU 缓存一致性CPU是如何执行任务的&#xff1f;什么是软中断&#xff1f;为什么0.1 0.2不等于0.3&#xff1f;哈希表数据类型篇 String String 是最基本的 key-value 结构&#xff0c;key 是唯一标识&…

03 | 授权服务:授权码和访问令牌的颁发流程是怎样的? 笔记

03 | 授权服务&#xff1a;授权码和访问令牌的颁发流程是怎样的&#xff1f; 授权服务的工作过程 小兔软件需要去到京东的平台那里”备案“注册&#xff0c;京东商家开放平台就会给小兔软件 app_id 和 app_secret 等信息&#xff0c;以方便后面授权时的各种身份校验&#xff0…

scratch绘制雷达 电子学会图形化编程scratch等级考试三级真题和答案解析2022年9月

目录 scratch绘制雷达 一、题目要求 1、准备工作 2、功能实现 二、案例分析

阶段二12_面向对象高级_继承1

一.继承的入门介绍 (1)继承的概念理解 让类与类之间产生关系&#xff08;子父类关系&#xff09;&#xff0c;子类可以直接使用父类中非私有的成员 (2)通过extends关键字实现继承 格式&#xff1a;public class 子类名 extends 父类名 { } 范例&#xff1a;public class Zi e…

Grafana 如何使用本地CSV文件作为数据源

Grafana提供了一个插件&#xff0c;可以把CSV文件作为数据源&#xff0c;关于CSV插件的说明&#xff0c;可以参考&#xff1a;https://grafana.com/grafana/plugins/marcusolsson-csv-datasource/?tabinstallation。我是在本地使用命令行grafana-cli plugins install marcusol…

通过45人!1-2月,誉天红帽RHCE学员再创佳绩!

学习的喜悦在于结果&#xff0c;也在于过程&#xff1b;在于取得成功时的豁然开朗&#xff0c;也在于持之以恒后的层层递进。结果固然重要&#xff0c;但在求知过程中获得的满足感&#xff0c;也同样让人乐在其中。 RHCE的学习过程就充满了这样的喜悦。对每一行命令的理解、对每…

【Linux学习】日积月累——调试器gdb的使用教程

一、背景 gdb是一款强大的命令行调试工具&#xff0c;可以形成执行程序、脚本。只需要几个简单的命令&#xff0c;就能够实现Windows环境下VC等IDE的图形化调式工具的功能。 调试的相关常识&#xff1a; 程序的发布方式有两种&#xff0c;debug模式和release模式&#xff1b;L…

197.Spark(四):Spark 案例实操,MVC方式代码编程

一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…

【Linux开发笔记】《Linux嵌入式开发从0到1》(一):初探Linux——与Linux的初次相遇

1.什么是Linux Linux就是一个操作系统&#xff0c;就是一个开源、自由的操作系统&#xff0c;就是一个免费使用和自由传播的类UNIX操作系统&#xff0c;就是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。 简单来讲&#xff0c;Linux就是一个操作系统而已… …

React的Hooks

React Hooks useState useMemo 和usecallback Hooks显示的指明因变量有什么好处 当使用时&#xff0c;y与changeX会被缓存下来&#xff0c;只要x不变&#xff0c;始终读取的是缓存的值&#xff0c; 如果不使用时&#xff0c;每次函数组件执行时&#xff0c;实际会基于x&#xf…

计算机写论文时,怎么引用文献? - 易智编译EaseEditing

首先需要清楚哪些引用必须注明[1]&#xff1a; 任何直接引用都要用引号并注明来源&#xff1b; 任何不是自己的口头或书面的观点、解释和结论都应注明来源&#xff1b; 即使不用原话&#xff0c;但是他人的思路、概念或观点也应注明&#xff1b; 不要为了适合你的观点修改原…

机器学习——无监督学习

机器学习的分类一般分为下面几种类别&#xff1a;监督学习( supervised Learning )无监督学习( Unsupervised Learning )强化学习( Reinforcement Learning&#xff0c;增强学习)半监督学习( Semi-supervised Learning )深度学习(Deep Learning)Python Scikit-learn. http: // …

day40|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

软件测试8

一 缺陷 软件缺陷&#xff1a;是指软件或程序中存在的各种问题及错误&#xff0c;会导致软件产品在某种程度上不能满足用户的需求 二 软件缺陷的判定标准 1.软件未达到需求规格说明书中表明的功能 2.软件出现了需求规格说明书不会出现错误的地方 3.软件的功能超出了需求规格…

14 nuxt3学习(布局 渲染模式 插件plugin 生命周期)

布局 布局是围绕包含多个页面的公共用户界面的页面的包装器&#xff0c;例如页眉和页脚显示。 布局是使用slot 组件显示页面内容的Vue文件。 默认情况下使用layouts/default.vue文件。 自定义布局可以设置为页面元数据的一部分。 方式一&#xff1a;默认布局 在layouts目录下…

Xmind快捷键大全

Xmind快捷键大全 1、常用 CtrlShiftL 快捷键助手CtrlHome 返回中心主题Enter 插入主题Tab 插入子主题F2 编辑主题F3 添加/编辑标签F4 添加/编辑备注F6 下钻ShiftF6 上钻Delete 删除Ctrl] 插入摘要CtrlI 插入图片CtrlShiftH 插入超链接Ctrl1,2,3,4,5,6快速添加优先等级图标Ctr…