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

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.lqws.cn/news/97885.html

相关文章:

  • SpringBoot项目打包成war包
  • Kdump 介绍与使用方式
  • Samtec技术支持 | 新型评估和开发套件
  • Agno:使用简单代码构建AI智能体
  • 百万级临床试验数据库TrialPanorama发布!AI助力新药研发与临床评价迎来新基石
  • MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动
  • 编译 Linux openssl
  • Asp.net core 使用EntityFrame Work
  • 一、基础环境配置
  • Walle-Web:打造轻量级高效的DevOps自动化部署平台
  • 【数据库】《DBA实战手记》- 读书笔记
  • centos中的ulimit命令
  • Python数据分析及可视化中常用的6个库及函数(一)
  • 【JAVA版】意象CRM客户关系管理系统+uniapp全开源
  • python调用硅基流动的视觉语言模型
  • Python基于SVM技术的手写数字识别问题项目实战
  • Vue3 + Vite:我的 Qiankun 微前端主子应用实践指南
  • 研发型企业如何面对源代码保密问题
  • one-hot编码VS对象嵌入表示
  • Java详解LeetCode 热题 100(25):LeetCode 141. 环形链表(Linked List Cycle)详解
  • 架构设计的目标:高内聚、低耦合的本质
  • 【文献精读】Explaining grokking through circuit efficiency
  • Unity 性能优化终极指南 — GameObject 篇
  • SIFT算法详细原理与应用
  • WINDOWS 下查找指定端口的进程并解除端口占用
  • 实践深度学习:构建一个简单的图像分类器
  • LVS负载均衡
  • 【小红书】API接口,获取笔记核心数据
  • 《汇编语言》第14章 端口
  • 集成学习之Bagging,Boosting,随机森林