[USACO1.5] 八皇后 Checker Challenge

题目描述

检查一个如下的6 x 6的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行,每列,每条对角线(包括两条主对角线的所有对角线)上都至多有一个棋子,如下例,就是一种正确的布局。
在这里插入图片描述
上面的布局可以用序列2 4 6 1 3 5来描述,第i个数字表示在第i行的相应位置有一个棋子,如下:
行号 1 2 3 4 5 6
列号 2 4 6 1 3 5
这只是跳棋放置的一个解。请写一个程序找出所有跳棋放置的解,并把它们以上面的序列方法输出。解按字典顺序排列,请输出前3个解,最后一行是解的总个数。

输入描述

一个数字N (6<=N<=14) 表示棋盘是N x N大小的。

输出描述

前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。
在这里插入图片描述

提示

【数据范围】
对于100% 的数据,6≤n≤13。
USACO Training Section 1.5

思路:

我们要使用回溯算法。

定义4个数组:a,b,c,d
用a数组来存储列号
接下来,我们用b,c,d来判断该位置是否可以放皇后

参考代码

#include <bits/stdc++.h>using namespace std;const int N = 107;int n, ans; // 棋盘大小和答案
int a[N], b[N], c[N], s[N]; // 标记void print_ans() { // 用来输出答案if(ans < 3) { // 只有第1-3个解才输出for(int i = 1; i <= n; i++)cout << s[i] << ' '; // 输出列数cout << endl; // 要换行}ans++; // 因为这是一种方法,所以加一次方案数
}void dfs(int i) {if(i > n) { // 如果方案可以print_ans(); // 进行操作return; // 必须要加,否则无法退出}for(int j = 1; j <= n; j++){if((!a[j]) && (!b[i + j]) && (!c[i - j + n])) // 判断该方法是否可行{s[i] = j;a[j] = 1;b[i + j] = 1;c[i - j + n] = 1; // 标记上下斜的地方不能放了dfs(i + 1); // 继续往下查找a[j] = 0; // 查找完后返回,相当于并没有实际走,重新标记为可走b[i + j] = 0;c[i - j + n] = 0;}}
}int main() {cin >> n;dfs(1); // 寻找方案数cout << ans; // void型函数不输出,所以用ans统计答案return 0;
}

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

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

相关文章

在protobuf里定义描述rpc方法的类型

service UserServiceRpc //在test.proto中定义 { rpc Login(LoginRequest)returns(LoginResponse); rpc GetFriendLists(GetFriendListRequest)returns(GetFriendListResponse); } test.proto文件生成test.pb.cc protoc test.proto --cpp_out./ 将生成的…

货币银行学-货币政策

货币政策 货币政策目标体系货币政策工具如何通过提高短期货币市场利率来缩减货币供应量&#xff1f;法定存款准备金率的作用是什么&#xff1f;它的调整有哪些影响&#xff1f;在货币政策的操作程序中&#xff0c;如何通过公开市场操作影响基础货币&#xff1f;基础货币的构成是…

【网站项目】校园商铺系统小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

数据结构_时间复杂度

✨✨所属专栏&#xff1a;数据结构✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 什么是时间复杂度&#xff1f; 时间复杂度的定义&#xff1a;在计算机科学中&#xff0c;算法的时间复杂度是一个函数&#xff0c;它定量描述了该算法的运行时间。一个算法执行所耗费的时间&#xff0…

亚马逊---设计安全架构

会从以下三个方面展开&#xff1a; 1、AWS资源访问安全 2、应用程序负载的网络安全 3、云中数据的安全 责任共担模式 就像租房子&#xff08;房东和你的责任&#xff09; AWS资源访问安全 需要掌握以下几点&#xff1a; 1、跨多个账户的访问控制和管理 2、AWS联合访问和身份服…

【Linux】系统安全及应用

目录 一、账号安全基本措施 1.系统账号清理 2.密码安全控制 3.历史命令安全管理 4.限制su切换用户 1&#xff09;将信任的用户加入到wheel组中 2&#xff09;修改su的PAM认证配置文件 5.ssh远程登录输入三次密码错误则锁定用户 二、Linux中的PAM安全认证 1.su命令的…

竞逐智能家居大模型:美的“蓄力”,海尔“疾行”

配图来自Canva可画 随着ChatGPT火热出圈&#xff0c;AI大模型便成为了各行各业必争的高地。“BAT”等互联网大厂、华为、小米等通讯巨头&#xff0c;以及一些垂直AI公司&#xff0c;都开始在大模型市场积极布局。众所周知&#xff0c;发展大模型的关键在于应用场景的落地&…

常见现代卷积神经网络(ResNet, DenseNet)(Pytorch 11)

一 批量规范化&#xff08;batch normalization&#xff09; 训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使他们收敛更加棘手。批量规范化&#xff08;batch normalization&#xff09;是一种流行且有效的技术&#xff0c;可持续加速深层网络的收敛速度。 …

谷歌google广告新手教程,看这一篇就足够!

谷歌Google广告是企业触达广大潜在客户、推动业务增长的强大渠道&#xff0c;对于初涉此领域的广告新手而言&#xff0c;掌握谷歌广告的基本操作、策略规划到优化技巧&#xff0c;无疑是开启成功营销之旅的关键。本文不仅为您提供一份详尽的谷歌广告入门指南&#xff0c;还将特…

单位信息宣传通讯稿件用对投稿方法轻松就能发表

在过去的日子里,作为单位的一员,我肩负着向各大媒体投放通讯稿件的重任。然而,这一过程却充满了曲折与辛酸。每次撰写完精心打磨的稿件,随之而来的并非是成就感,而是繁复冗长的投稿流程。我不得不花费大量时间登录各个媒体平台,逐个填写邮件主题、正文以及附件,不仅耗时费力,还…

一文读懂Partisia Blockhain:兼顾去中心化、安全性与可扩展性

“Partisia Blockhain 解决了区块链领域长期存在的问题&#xff0c;其兼顾了去中心化、安全性以及可扩展性” Partisia Blockchain 是一个具有独特零知识证明预言机以及分片解决方案的 Layer1&#xff0c;解决了困扰整个区块链行业的问题。 目前&#xff0c;多样化的区块链层出…

mac m1/m2 芯片安装 ps 2023 插件无法显示扩展界面

碎碎念&#xff1a;一直在踩坑的路上&#xff0c;甚至想休息时间玩一会儿 ps 都能踩坑 问题描述 新的 m2 芯片 mac 安装了色环插件后&#xff0c;在窗口界面中没有找到扩展&#xff0c;且在首选项->增效工具的旧版扩展也是灰色的 题外话&#xff1a;记录一下 mac 的 photo…