n皇后问题

N皇后问题 DFS C++ N皇后问题 N皇后问题研究的是如何将N个皇后放置在N * N的棋盘上,并且使皇后彼此不能相互攻击。(皇后可以直走,横走,斜走) 这里使用DFS来解决这道问题,用递归搜索所有的可能性,把符合要求的解存放在数组queenPos中,这个数组下标代表行数,对应的值代表列数。如queenPos[0]值为1,就代表皇后摆放在(0,1)这个位置。 #include<iostream> #i... 阅读详情

问题描述 

n皇后问题是指在一个n*n的国际象棋棋盘上放置n个皇后,使得这n个皇后两两均不在同一行、同一列、同一条对角线上。

求合法的方案数。

解法一

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

//int count=0;

int nQueen(int a[],int k,int n)
{
	static int count=0;
	
	if(k==n-1)
	{
		bool flag=true;		
		for(int i=0;i<n;i++)
		{
			for(int j=i+1;j<n;j++)
			{
				if(abs(i-j)==abs(a[i]-a[j])) flag=false;
			}
		}
		if(flag) count++;
		//count++; 
	}
	else
	{
		for(int i=k;i<n;i++)
		{
			swap(a[i],a[k]);
			nQueen(a,k+1,n);
			swap(a[i],a[k]);
		}		
	}
	return count;
}

int main()
{
	int a[8]={1,2,3,4,5,6,7,8};
	cout<<nQueen(a,0,8);
	//cout<<count;
	return 0;	
}

 

解法二

 蛮力法( 算法笔记 P116)

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

const int maxn=12;
int P[maxn];
bool hash[maxn]={false};
int count=0;
int n;

void generate(int index)
{
	if(index==n+1)
	{
		bool judge=true;
		for(int i=1;i<=n;i++)
		{
			for(int j=i+1;j<=n;j++)
			{
				if(abs(i-j)==abs(P[i]-P[j])) 
				{
					judge=false;
					break;
				}
			}
			
		}
		if(judge) count++;
		//return;
	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			if(hash[i]==false)
			{
				P[index]=i;  //填入数据 
				hash[i]=true;
				generate(index+1);
				hash[i]=false;
			}
		}		
	}
}

int main()
{
	n=8;
	generate(1);
	cout<<count;
	return 0;
}

解法三

 回溯法(算法笔记 P117)

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

const int maxn=12;
int P[maxn];
bool judge[maxn]={false};

int count=0;
int n;

void generate(int index)
{
	if(index==n+1)
	{
		count++;
	}
	else
	{
		for(int i=1;i<=n;i++)
		{
			
			if(judge[i]==false)
			{
				bool flag=true;
				for(int j=1;j<index;j++)
				{
					if(abs(j-index)==abs(i-P[j])) 
					{
						flag=false;
						break;
					}
				}
				if(flag)
				{
					judge[i]=true;
					P[index]=i;  //别忘记填入数据 
					generate(index+1);
					judge[i]=false;				
				} 				
			}			
		}		
	}	
}



int main()
{
	n=8;
	generate(1);	
	cout<<count;
	return 0;
	
}

蓝桥杯 2n皇后问题 n皇后问题 python 蓝桥杯 2n皇后问题 n皇后问题 python资源限制问题描述输入格式输出格式样例输入样例输出样例输入样例输出实现代码算法分析N皇后问题list[:]与list[]的区别 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。 输入格式 输入的第一行为一个整 阅读详情

相关推荐

【N皇后问题】递归+回溯算法求解N皇后问题

同一行上面,只能存在一个皇后。同一列上面,只能存在一个皇后。同一斜线上面,只能存在一个皇后。满足上面三个规则的一个放置方法,我们把他叫做N皇后的一个解,常见的N皇后问题有:四皇后、八皇后。对于四皇后问题,可以有下面两种摆放方法:在这里为了程序方便,我们规定:将整个棋盘看作是一个【nxn】的二维矩阵,其中矩阵中每一个单元格位置存放的元素,如果是【.】点号,则表示当前位置没有放置皇后;如果是【Q】符号,则表示当前位置放置了一个皇后。下面具体介绍一下,如何通过程序求解N皇后的问题。

✅ Java 开发工程师 1261

ACWing n-皇后问题

n−n−皇后问题是指将nn个皇后放在n×nn×n的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数nn,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数nn。 输出格式 每个解决方案占nn行,每行输出一个长度为nn的字符串,用来表示完整的棋盘状态。 其中.表示某一个位置的方格状态为空,Q表示某一个位置的方格上摆着皇后。 每个方案输出完成后,输出一个空行。 注意:行末不能有多余空格。 输出方...

Stillboring的博客 2481

Ubuntu 22.04 搭建 PX4 飞控系统完全指南:从仿真到硬件试飞

定义消息文件protobufuint64 timestamp # 时间戳float32 temperature # 温度float32 humidity # 湿度生成代码:bashPX4 在 Ubuntu 22.04 的搭建涉及环境配置、编译仿真、硬件连接等多环节,核心是理解 PX4 1.14 的新特性(uXRCE-DDS、动态控制分配)。通过本文指南,开发者可快速构建稳定的 PX4 开发环境,为无人机应用开发奠定基础。

zqmgx13291的博客 3044

N皇后问题

来源:牛客网。

2203_75823307的博客 264

基于远程服务器 Tip_Adapter源码从零开始复现

从零一步步实现源代码的运行

zcyzcyjava的博客 1604

【Unity Shader】2D模型 3D模型混用的穿模问题(Spine在3D场景中出现前后穿模问题的解决办法)

问题描述: 在3D场景中使用Spine模型(2D), 因为Spine需要像Billboard类似的处理,永远是垂直与相机的, 所以一般情况下2D模型能正常显示且前后的阻挡关系也是没有问题的,如下图所示,一切都很美好.(这里用一个四边形,图中的福字表示2D模型) 可是如果后面蓝色的格子比较高,或者2D角色本身也比较高,那么就会出现模型穿插的问题,如下图所示: 如果吧2D模型竖立起来,前后关系肯定是没有问题的,所以也能避免模型穿插的问题,可是就没有Billboard效果,圆形的福字已经被压扁了,如下图:

Vitens的专栏 4592

要在n*n的国际象棋棋盘中放n个皇后,使任意两个皇后都不能互相吃掉。规则:皇后能吃掉同一行、同一列、同一对角线的任意棋子。

#include <stdio.h> #include <math.h> int max ; int queen[100], sum = 0; void show() int i; for (i = 0; i < max; i++) { printf("%d ", queen[i] + 1); } printf("\n"); sum++; } int PLACE(int n) { int i; for (i = 0; i < n; i++) {.

qq_46116963的博客 2892

wireshark抓包分析TCP协议和用Fiddler抓包Https分析

wireshark抓包分析TCP协议和用Fiddler抓包Https分析 1.实验说明: 以某种游戏的客户端连接服务器、断开服务器为例,用wireshark抓包分析TCP协议的三次握手连接、四次握手断开,与计算机网络原理进行验证;用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 2.实验过程: wireshark实验: (1)实验准备:安装《洛克王国》游戏客户端, 运行洛克王国客户端,打开内存资源管理器查看PID 根据PID查看洛克王国服务端的IP地址和端口号 并打开命令行运行以下命令: n

qq_42032327的博客 1261

dfs算法:843. n-皇后问题

n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数n,请你输出所有的满足条件的棋子摆法。 输入格式 共一行,包含整数n。 输出格式 每个解决方案占n行,每行输出一个长度为n的字符串,用来表示完整的棋盘状态。 其中”.”表示某一个位置的方格状态为空,”Q”表示某一个位置的方格上摆着皇后。 每个方案输出完成后,输出一个空行。 输出方案的顺序任意,只要不重复且没有遗漏即可。 数据范围 1≤n≤9 输入样例: 4

weixin_51160138的博客 244

WPS Office 2026免费安装指南:AI办公与安全使用全解析

办公软件作为数字化办公的核心工具,其基本原理是通过文档处理、数据计算和演示展示等功能模块满足用户日常办公需求。随着人工智能技术的发展,现代办公软件逐步集成AI能力,通过自然语言处理和数据分析算法提升工作效率。在技术价值层面,优秀的办公软件不仅需要保持格式兼容性和跨平台同步能力,更要注重用户数据安全防护。从应用场景来看,无论是个人文档编辑、企业报表分析还是团队协作演示,办公软件都发挥着关键作用。WPS Office 2026作为国产办公软件代表,深度融合AI助手功能,支持智能写作和数据分析,同时通过官方免费策

weixin_30599769的博客 734

STC8H开发(十六): GPIO模拟SPI驱动Ci24R1实现低成本无线遥控

本文详细介绍了如何使用STC8H单片机通过GPIO模拟SPI驱动Ci24R1无线模块,实现低成本无线遥控方案。内容涵盖硬件设计要点、软件驱动开发技巧及实战优化经验,特别适合消费电子产品开发者参考。Ci24R1凭借其高性价比和双模协议支持,成为替代传统nRF24L01+的理想选择。

weixin_30378623的博客 351

2n皇后问题 / n皇后问题

题目 点此查看原题 问题描述   给定一个n*n的棋盘,棋盘中有一些位置不能放皇后。现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行、同一列或同一条对角线上,任意的两个白皇后都不在同一行、同一列或同一条对角线上。问总共有多少种放法?n小于等于8。 输入格式   输入的第一行为一个整数n,表示棋盘的大小。   接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置...

MineQAQ 6188

planning模块(6)-参考线的平滑(二次规划)

上一篇已经介绍了采样点生成锚点数据的过程,并且将所有采样点生成的锚点数据设置到了平滑器中.接下来继续介绍使用二次规划平滑参考线的算法过程.从锚点数据中提取坐标存入raw_point2d,提取横向边界存入anchorpoints_lateralbound,将起点和终点的横向边界设置为0,防止车在起点和终点位置偏离车道中心线.

让复杂的问题变得更容易理解 790

Java——N皇后问题

按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

m0_60867520的博客 4375

使用 Python 爬虫抓取 IMDb 电影信息 - 评分、评论与基本信息抓取教程

本文介绍了如何使用 Python 爬虫技术抓取 IMDb 电影评分、评论和基本信息。我们分别展示了通过IMDb API和两种方法抓取数据,并进行了数据存储、分析与可视化。在未来,我们还可以基于这些数据开发电影推荐系统、情感分析工具等,进一步丰富电影数据的应用场景。通过这些实践,您不仅学会了如何抓取和存储数据,还可以通过这些基础来构建自己的数据分析应用,获取更丰富的电影数据。

2201_76125261的博客 601

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

N皇后、2N皇后问题总结

N皇后问题 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。 Input 共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。 Output 共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。 Sam...

lanshan1111的博客 904

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

N皇后问题详解

原题: leetcode 51 隐式图, 状态/关系, DFS与回溯法 图的DFS的搜索过程形成搜索树, 在七月君的视频及pdf里有针对图的DFS/BFS的详细过程的讲解. 注意这个讲解是针对图(邻接表实现)的结构进行的; DFS/BFS的时间复杂度都是O(n + m); (n - 节点数量, m - 边数量); 但现实解题中图的结点和边并不是一开始就明确给出的, 需要把现实问题转换成一个"隐式图"。 隐式图, 需要根据问题去划分"状态"与"关系"。状态是指从初始到目标, 问题经历的中间过程; 状态一般是隐

葡萄老君 4287

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

N 2N皇后问题

N皇后问题: 国际象棋中皇后的势力范围覆盖其所在的行、列以及两条对角线,现在考察如下问题:如何在n x n的棋盘上放置n个皇后,使得她们彼此互不攻击 对于任何整数:n>=4,这就是n皇后问题。我们常说的8皇后问题也就是n为8的时候 //首先来看看n皇后问题 #include<bits/stdc++.h> using namespace std; int sum;//可以成功摆放...

张一 241
上一篇: 字符串hash
下一篇: pat b1020 月饼  (贪心法)
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值