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

lanqiaoOJ 1508:N皇后问题 ← dfs

【题目来源】
https://www.lanqiao.cn/problems/1508/learning/

【题目描述】
在 N×N 的方格棋盘放置了 N 个皇后,使得它们不相互攻击(即任意 2 个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成 45角的斜线上。你的任务是,对于给定的 N,求出有多少种合法的放置方法。

【输入格式】
输入中有一个正整数 N≤10,表示棋盘和皇后的数量。

【输出格式】
为一个正整数,表示对应输入行的皇后的不同放置数量。

【输入样例】
5

【输出样例】
10

【算法分析】

主对角线是棋盘中从左上到右下的斜线,主斜线 zxx[] 是棋盘中与主对角线平行的斜线。
观察易知,同一主斜线上各棋格的横坐标 x 减去纵坐标 y 的差相等。即说明同一主斜线上多个棋格可通过减法映射到数组中的同一位置。此时,若判断某条主斜线上是否出现过一次皇后,即查看 zxx[x - y] 是否为空即可。但这样做减法时可能会得到一个负数,是没法直接映射到数组中的,因此在主斜线上做判断时统一加上一个常量保证非负,即 zxx[x - y + n]。

副对角线是棋盘中从左下到右上的斜线,副斜线 fxx[] 是棋盘中与副对角线平行的斜线。
观察易知,同一副斜线上各棋格的横坐标 x 加上纵坐标 y 的和相等。即说明同一副斜线上多个棋格可通过加法映射到数组中的同一位置。此时,若判断某条副斜线上是否出现过一次皇后,即查看 fxx[x + y] 是否为空即可。
————————————————                       
原文链接:https://blog.csdn.net/hnjzsyjyj/article/details/148391039

【算法代码】
通过三个一维数组 (col,zxx,fxx) 替代二维数组检查,将空间复杂度从 O(N²) 降到O(N),是 
N 皇后问题的优化解法

#include <bits/stdc++.h>
using namespace std;const int N=15;
char a[N][N];
bool zxx[N<<1],fxx[N<<1],col[N];
int n,ans;void dfs(int k) { //k:rowif(k==n) {ans++;return;}for(int i=0; i<n; i++) { //i:columnif(!col[i] && !fxx[i+k] && !zxx[n-i+k]) {col[i]=fxx[i+k]=zxx[n-i+k]=1;dfs(k+1);col[i]=fxx[i+k]=zxx[n-i+k]=0;}}
}int main() {cin>>n;dfs(0);cout<<ans<<endl;return 0;
}/*
in:5
out:10
*/




【参考文献】
https://www.lanqiao.cn/problems/1508/learning/
https://blog.csdn.net/hnjzsyjyj/article/details/148391039




 

http://www.xdnf.cn/news/11038.html

相关文章:

  • Linux进程间通信(IPC)
  • TypeScript 中的字面量类型(Literal Types)
  • 什么是 Docker Compose 的网络(network),为什么你需要它,它是怎么工作的
  • 词语翻译的三步法与背后的语言学思维
  • R²AIN SUITE AI知识库助力中国制造业数字化转型
  • ABAP设计模式之---“高内聚,低耦合(High Cohesion Low Coupling)”
  • 嵌入式学习 D31:系统编程--Framebuf帧缓冲
  • java实用类
  • 【Agent智能体】吴恩达:AI智能体发展现状 | LangChain访谈--快速总结
  • 电脑远程桌面连接如何设置端口?默认修改和内网给外网访问方法
  • ArkUI-X中Plugin生命周期开发指南
  • 不连网也能跑大模型?
  • 手机上网可以固定ip地址吗?详细解析
  • Ubuntu22.04 安装 Miniconda3
  • python直方图
  • 【前端并发请求控制:必要性与实现策略】
  • 为何选择Spring框架学习设计模式与编码技巧?
  • 从“remote rejected”看git角色区别,Maintainer和Devoloper
  • 使用 Docker Compose 安装 Redis 7.2.4
  • Python基于PCA、PCA-kernel、LDA的同心圆数据降维项目实战
  • 2005-2022全国及各省家庭承包耕地流转总面积及经营耕地面积数据(无缺失)
  • 移动网页调试的多元路径:WebDebugX 与其他调试工具的组合使用策略
  • HarmonyOS Next 弹窗系列教程(2)
  • matlab实现掺杂光纤放大器的模拟
  • uniapp开发使用vue3组合式api,实现从vue模块中自动导入
  • Flotherm软件许可与硬件要求
  • 我的技术笔记
  • 《汇编语言》第14章 端口
  • Python Day41学习(日志Day8复习)
  • 基于蝙蝠算法的路径优化