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

洛谷 P1219:[USACO1.5] 八皇后 Checker Challenge ← DFS

【题目来源】
https://www.luogu.com.cn/problem/P1219

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

P1219

上面的布局可以用序列 2 4 6 1 3 5 来描述,第 i 个数字表示在第 i 行的相应位置有一个棋子,如下:
行号 1 2 3 4 5 6
列号 2 4 6 1 3 5
这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。
并把它们以上面的序列方法输出,解按字典顺序排列。
请输出前 3 个解。最后一行是解的总个数。

【输入格式】
一行一个正整数 n,表示棋盘是 n×n 大小的。

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

【输入样例】
6

【输出样例】
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4​​​​​​​

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

【算法分析】
● 在二维矩阵中,主对角线和副对角线是两种基本的对角线方向。
(1)主对角线‌
方向与特点‌:从矩阵的‌左上角‌延伸至‌右下角‌。
元素位置‌:位于主对角线上的所有元素,其行号(row)与列号(col)‌相等‌,即 row==col。这也是其最常见的判定方式。
公式应用‌:在编程中(例如解决八皇后问题),常用 row-col 的值来标识唯一的主对角线,因为同一主对角线上的 row-col 是一个常数。
(2)副对角线
方向与特点‌:从矩阵的‌右上角‌延伸至‌左下角‌。它也称为‌反对角线‌或‌次对角线‌。
元素位置‌:位于副对角线上的所有元素,其行号与列号之和为‌定值‌。对于一个 n×n 的方阵,这个定值通常是 n-1,即 row+col==n-1。
公式应用‌:在编程中,常用 row+col 的值来标识唯一的副对角线,因为同一副对角线上的 row+col 也是一个常数。​​​​​​​

● 判断逻辑基于以下三个条件:

if(col[colIdx] || dg[row+colIdx] || udg[n-row+colIdx]) {continue;
}

(1)列冲突检查‌:col[colIdx]
若为 true,表示第 colIdx 列已被其他行的皇后占用,当前位置不安全。
(2)主对角线冲突检查‌:dg[row+colIdx]
若为 true,表示当前 (row, colIdx) 所在的主对角线(左上到右下方向)已被占用。该方向上的所有点满足 行索引 - 列索引 = 常数。使用 row+colIdx 作为标识键,是为了避免差值为负的情况,方便数组索引。
(3)副对角线冲突检查‌:udg[n-row+colIdx]
若为 true,表示当前 (row, colIdx) 所在的副对角线(右上到左下方向)已被占用。该方向上的所有点满足“行索引+列索引=常数”。使用 n-row+colIdx 作为标识键,同样是为了将常数映射到非负的数组索引范围。

【算法代码】

#include <bits/stdc++.h>
using namespace std;const int N=20;
bool dg[N<<1]; //principal diagonal
bool udg[N<<1]; //counter diagonal
int pos[N]; //Record column number where queen is placed
bool col[N];
int cnt;
int n;void print() {for(int i=1; i<=n; i++) {cout<<pos[i]<<" ";}cout<<endl;
}void dfs(int row) {if(row>n) {cnt++;if(cnt<=3) print();return;}for(int colIdx=1; colIdx<=n; colIdx++) {if(col[colIdx] || dg[row+colIdx] || udg[n-row+colIdx]) {continue;}pos[row]=colIdx;col[colIdx]=dg[row+colIdx]=udg[n-row+colIdx]=true;dfs(row+1); //Search the next linecol[colIdx]=dg[row+colIdx]=udg[n-row+colIdx]=false; //traceback}
}int main() {cin>>n;dfs(1);cout<<cnt<<endl;return 0;
}/*
in:
6out:
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
*/





【参考文献】
https://blog.csdn.net/Demilly123/article/details/127721176
https://www.luogu.com.cn/problem/solution/P1219
https://www.cnblogs.com/qiuliw/p/18760573
https://www.cnblogs.com/Kyriech-Francis/p/Answer_P1219.html




 

http://www.jsqmd.com/news/258275/

相关文章:

  • 【潮流计算】基于matlab分布式电源接入电力系统的潮流计算与分析【含Matlab源码 14972期】
  • 30行PHP,利用硅基流动API,网页客服瞬间上线
  • 洛谷 P6405 [COCI 2014/2015 #2] ŠUMA 题解
  • 探讨男士去屑洗发水推荐,黛熙梦多少钱 - 工业品牌热点
  • 在 CentOS 系统上运用安装并用alternatives切换 JDK17(与 JDK8 共存指南)
  • 2026蝶阀评测精选:不锈钢蝶阀优选,锻钢闸阀/旋启止回阀/蝶阀/手动截止阀,蝶阀供应商如何选 - 品牌推荐师
  • 2026年耐候钢认证厂家,哪家性价比高一看便知 - 工业品牌热点
  • 2026年1月云南旅行社服务品质与客户口碑权威测评榜单发布 - 品牌推荐
  • 徐州市鼓楼云龙贾汪泉山铜山区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜推荐 - 老周说教育
  • 2026年国内比较好的测水流量计生产商联系电话,氮气流量计/德尔塔巴流量计/变送器/差压变送器,测水流量计品牌哪家强 - 品牌推荐师
  • 聚焦全域深度游与安心出行:2026年适配不同游客需求的五大云南旅行社全景对比。 - 品牌推荐
  • GitHub霸榜----DeepSeek-V3 与 Janus-Pro 开源:国产 AI 这一战,彻底改变了游戏规则
  • 学霸同款2026 8个一键生成论文工具测评:开题报告文献综述全攻略
  • 告别行程纠纷与隐形消费:2026年最新盘点真正懂云南市场的三家高适配旅行合作伙伴 - 品牌推荐
  • 第18天:信息打点-APP资产知识产权应用监控静态提取动态抓包动态调试
  • AI多智能体决策教学系统:让复杂决策逻辑看得见
  • 2026年1月云南旅行社实力排行榜:基于客户口碑与合规资质的TOP5权威榜单揭晓。 - 品牌推荐
  • AI泛舆情智能体协同平台:让数据学会“分工协作”
  • 2026年1月云南旅行社服务实力与口碑权威测评排行榜 - 品牌推荐
  • 深入解析:PyAutoGUI 模拟鼠标键盘:原理解析 + 工程实践案例 + 踩坑指南
  • 深入解析Redis三大缓存问题:穿透、击穿、雪崩及解决高效的方案
  • 徐州市鼓楼云龙贾汪泉山铜山区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 老周说教育
  • 动力电池SOC估算:安时与功率积分法对比
  • 2026必备!专科生毕业论文痛点TOP10 AI论文平台测评
  • 深入解析:企业级视频处理:openEuler 环境 FFmpeg 多场景转码性能实战
  • 2026年市面上诚信的磁力泵生产厂家电话,不锈钢离心泵/四氟离心泵/氟塑料磁力泵/耐酸碱磁力泵,磁力泵供应商推荐 - 品牌推荐师
  • 分享2026年宜良比较好的装修设计专业公司排名 - 工业品牌热点
  • 2026年行业内技术好的包衣机订制厂家口碑推荐,粉碎整粒机/离心造粒包衣机/糖衣包衣机/高效沸腾制粒机,包衣机工厂哪个好 - 品牌推荐师
  • 2025新中式高定服装定制大赏,哪款能让你心动?,优秀的新中式高定服装排行榜精选优质厂家 - 品牌推荐师
  • Maven工作原理总结