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

蓝桥杯备考:DFS问题之八皇后问题

这道题 n*n的棋盘,我们每行摆放一个棋子,我们的剪枝策略就是如果放置某一行的棋子的时候,该棋子列上已经有棋子了或者对角线上已经有棋子的时候,我们就要剪掉他,

怎么判断对角线上有没有存在的元素了呢?我们可以开一个2*N大小的数组,把y-x和y+x的值存起来,代表每条对角线,y-x代表主对角线,但是有可能是负数,所以我们就统一是y-x+n来存储

副对角线用x+y存

代码:

#include <iostream>
#include <vector>
using namespace std;

const int N = 50;
bool col[N],row[N],st1[N],st2[N];
int n;
int cnt;
vector <int> ret;
void dfs(int y)
{
	if(y > n)
	{
		cnt++;
		if(cnt <= 3)
		{
			for(auto e : ret)
			{
				cout << e << " ";
			}
			cout << endl;
		}
		return;
	}
	for(int x = 1;x<=n;x++)
	{
		if(col[x] || st1[y-x+n] || st2[x+y])continue;
		ret.push_back(x);
		col[x] = st2[x+y] = st1[y-x+n] = true;
		dfs(y+1);
		ret.pop_back();
	    col[x] = st2[x+y] = st1[y-x+n] = false;
	}
}
int main()
{
	cin >> n;
	dfs(1);
	cout << cnt << endl;
}


http://www.kler.cn/a/563949.html

相关文章:

  • Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family
  • BCT计算图论属性
  • 【Python爬虫(84)】当强化学习邂逅Python爬虫:解锁高效抓取新姿势
  • 安装TortoiseGit时,显示需要安装驱动?!
  • Fisher信息矩阵与Hessian矩阵:区别与联系全解析
  • FlutterJSON
  • RAG(检索增强生成)原理、实现与评测方法探讨
  • Pytorch使用手册-音频 I/O(专题十八)
  • pycharm 创建数据库 以及增删改查
  • Java中的缓存技术:Guava Cache vs Caffeine vs Redis
  • 火狐浏览器多开指南:独立窗口独立IP教程
  • 蓝桥杯备赛-拔河
  • Brave 132 编译指南 Android 篇 - 项目结构 (二)
  • Java 大视界 -- 基于 Java 的大数据机器学习模型压缩与部署优化(99)
  • Redis Lua Script 溢出漏洞(CVE-2024-31449)
  • AI数字人开发,引领科技新潮流
  • 防火墙各项指标代表什么意思
  • CCNP知识笔记
  • Web网页开发——水果忍者
  • Python高并发原理与实战解决方案指南