18124 N皇后问题

18124 N皇后问题

时间限制:2000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: G++;GCC;VC

 

Description

有N*N的国际象棋棋盘,要求在上面放N个皇后,要求任意两个皇后不会互杀,有多少种不同的放法?




输入格式

每一个数为T,代表CASE的数量,T<=13
此后,每行一个数N(13>=N>0)



输出格式

每一个CASE,输出对应答案



 

输入样例

2
4
5



 

输出样例

2
10



 

作者

 admin

  SCAU-N皇后问题—回溯。输入n,求出在n*n的棋盘上放置n个皇后可以有多少种解;就是一个八皇后问题,而且题目的n也非常的小,时间还给了2000ms,就算暴力回溯O(n^2)的复杂度都可以过。但这里介绍一个优化上的技巧。    皇后可以攻击到同行同列和两条对角线上的棋子,,那么肯定是一行行的放置,一行和一列都是只能放置一个棋子的。  在判断同列的时候,开一个row[MAXN+5]的数组来标记哪些列放置了皇后。  对于两个对角线;要判断是否已放有棋子,就只要再开个二维的数组diagonal[2][MAXN*2+5];   其中,y-x是主对角线,y+x是副对角线。 但y-x可能为负数,所以要写成y-x+n; 在判断到当前cur行上的位置j可以放置的话,就把diagonal[0][cur-j+n]和diagonal[1][cur+j]都标记为1 以此表示该条对角线上已经放置有棋子了。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <cctype>
 6 #include <cmath>
 7 #include <algorithm>
 8 #include <set>
 9 #include <map>
10 #include <queue>
11 #include <stack>
12 #include <utility>
13 #include <vector>
14 #define ll long long
15 #define inf 0x3f3f3f3f
16 using namespace std;
17 
18 int row[20],diagonal[2][30];//标记列和两条对角线的数组
19 int cnt,n;
20 void dfs(int cur)
21 {
22     if(cur==n+1) //到达递归边界
23     {
24         cnt++;
25         return;
26     }
27     for(int i=1;i<=n;i++)
28     {     //判断列上、两条对角线上是否已有棋子
29         if(!row[i]&&!diagonal[0][cur+i]&&!diagonal[1][cur-i+n])
30         {
31             row[i]=diagonal[0][cur+i]=diagonal[1][cur-i+n]=1;
32             dfs(cur+1);
33             row[i]=diagonal[0][cur+i]=diagonal[1][cur-i+n]=0;
34         }
35     }
36 }
37 int main()
38 {
39     //freopen("input.txt","r",stdin);
40     memset(row,0,sizeof(row));
41     memset(diagonal,0,sizeof(diagonal));
42     int t;
43     scanf("%d",&t);
44     while(t--)
45     {
46         scanf("%d",&n);
47         cnt=0;
48         dfs(1);
49         printf("%d\n",cnt);
50     }
51     return 0;
52 }

 

转载于:https://www.cnblogs.com/geek1116/p/5553536.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ux设计师怎样找同类产品_没有预算? 别找借口。 便宜的UX上的UX 2:让我们开始构建。...

ux设计师怎样找同类产品by Vinny文尼 没有预算&#xff1f; 别找借口。 便宜的UX上的UX 2&#xff1a;让我们开始构建。 (No budget? No excuse. UX on the cheap Part 2: let’s get building.) This is a continuation of my series on ‘UX on a Budget’. If you haven’…

巨蟒python全栈开发-第6天 is==

1.小数据池 2.id 3.decode和encode 小数据池 #小数据池:不要死磕就行#python为了简化,搞出来的一个东西ID (1)# id()函数可以帮我们查看一个变量的内存地址# a10# b30# c10# print(id(a)) #1712876864# print(id(b)) #1712877504# print(id(c)) #1712876864(2)# lst[周…

安装mysql8._安装MySQL8(附详细图文)

安装MySQL8(附详细图文)删除mysql服务&#xff1a;mysqld -remove mysql1、下载 mysql 8下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/2、配置 mysql 配置文件打开 mysql 8 的安装目录&#xff1a;my.ini注意设置自己对应的 mysql 安装目录 和数据存放目录[mysq…

win10安装windows live writer 错误:OnCatalogResult:0x80190194

到官网下载了一个在线安装程序&#xff0c;可是一运行就提示无法安装&#xff0c;显式错误“OnCatalogResult:0x80190194”&#xff0c;如下图所示 找到windows live安装程序的安装日志文件。具体位置是&#xff1a;C:\Users\All Users\Microsoft\WLSetup\Logs 需要下载安装文件…

C# 实现一个可取消的多线程操作 示例

private void button1_Click(object sender, EventArgs e){//定义一个为可取消资源标志CancellationTokenSource cts new CancellationTokenSource();//定义二个为可取消资源标志CancellationTokenSource cts1 new CancellationTokenSource();//实现一个可取消操作的回调函数…

这些工具将提高您的Android生产率

by Michal Bialas由Michal Bialas 这些工具将提高您的Android生产率 (These tools will boost your Android productivity) The main purpose of this post is to list and describe tools (mainly free ones), which allow you to boost your productivity, efficiency, and …

python四位玫瑰数的解题思路_入门python知识点总结以及15道题的解题思路分析

知识点总结python1、序列app操做符idex in s 若是x是列表s的元素&#xff0c;返回True&#xff0c;不然Falses t 链接两个序列s和ts*n或者n*s 将序列s复制n次s[i] 返回s中第i元素s[i:j]或s[i:j: k] 切片&#xff0c;返回序列s中第i到j-1以k为步长的元素子序列函数函数len(s) 返…

TZOJ--5480: 孤衾易暖 // POJ--3735 Training little cats (矩阵快速幂)

5480: 孤衾易暖 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 描述 哇&#xff0c;好难&#xff0c;我要放弃了(扶我起来&#xff0c;我还能A 寒夜纵长&#xff0c;孤衾易暖&#xff0c;钟鼓渐清圆。 生活也许有些不如意的地方&#xff0c;但是没有什么是拥有一…

IntelliJ IDEA2017 修改缓存文件的路径

IDEA的缓存文件夹.IntelliJIdea2017.1&#xff0c;存放着IDEA的破解密码&#xff0c;各个项目的缓存&#xff0c;默认是在C盘的用户目录下&#xff0c;目前有1.5G大小。现在想要把它从C盘移出。 在IDEA的安装路径下中&#xff0c;进入bin目录后找到属性文件&#xff1a;idea.pr…

解决iphone填写表单时,表单项获取焦点时往下拉屏,导致顶部标题栏下滑错位...

$(function () {//解决iphone填写表单时&#xff0c;表单项获取焦点时往下拉屏&#xff0c;导致顶部标题栏下滑错位var u navigator.userAgent;var isiOS !!u.match(/\(i[^;];( U;)? CPU.Mac OS X/); //ios终端if (isiOS true) {var pageHeight window.innerHeight;$(&quo…

aws cognito_AWS Cognito的用户管理—(2/3)核心功能

aws cognitoby Kangze Huang黄康泽 AWS Cognito的用户管理—(2/3)核心功能 (User Management with AWS Cognito — (2/3) The Core Functionality) 完整的AWS Web样板-教程1B (The Complete AWS Web Boilerplate — Tutorial 1B) Main Table of Contents Click Here主要目录请…

python字符串后面添加字符串_什么是字符串?怎样在Python中添加字符串?

字符串是一种表示文本的数据类型&#xff0c;字符串中的字符可以是ASCII字符、各种符号以及各种Unicode字符。Python中的字符串有如下三种表现方式。第1种方式&#xff1a;使用单引号包含字符。示例代码如下&#xff1a;a 123注意&#xff0c;单引号表示的字符串里不能包含单引…

surround360

1.读入配置文件2.创建底部和顶部投影线程3.将侧面图投影到球座标(1)load侧面相机图像(2)创建投影线程(3)等待线程结束4.渲染立体全景图(侧边)(1)计算重叠区域宽度(2)创建准备生成新视图的线程: 送入相邻两个相机的投影图,计算光流flowLtoR,flowRtoL, 保存在novelViewGenerators…

snapchat_我刚刚在Snapchat获得开发人员职位。

snapchatby Jon Deng乔恩邓 我刚刚在Snapchat获得开发人员职位。 这是我学到的东西&#xff0c;以及它如何帮助您进行求职。 (I just got a developer job at Snapchat. Here’s what I learned and how it can help you with your job search.) About a year ago, while depl…

sys.argv

import sysi0 print len(sys.argv) while i < len(sys.argv):print sys.argv[%d]:%s %(i,sys.argv[i])i i1 import sysprint len(sys.argv) for i in range(len(sys.argv)):print sys.argv[%d]:%s %(i,sys.argv[i]) 执行 结果 &#xff1a;E:\MyScript>python sysargs.py…

Docker安装java-Zookeeper进行操作

Docker安装Zookeeper下载Zookeeper镜像 docker pull zookeeper启动容器并添加映射 docker run --privilegedtrue -d --name zookeeper --publish 2181:2181 -d zookeeper:latest 查看容器是否启动 docker ps idea提供了一个Zookeeper插件&#xff0c;以供连接Zookeeper服务中心…

java反射获取注解_Java自定义注解和运行时靠反射获取注解

java自定义注解Java注解是附加在代码中的一些元信息&#xff0c;用于一些工具在编译、运行时进行解析和使用&#xff0c;起到说明、配置的功能。注解不会也不能影响代码的实际逻辑&#xff0c;仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。1、元注解元注解是指注解…

进程间的通讯(IPC)方式

内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程&#xff0c;发送的数据量在一个字节到几M字节之间共享数据&#xff1a;多个进程想要操作共享数据&#xff0c;一个进程对共享数据的修改&a…

开发人员避免编写测试的2个最常见原因

This post was originally published on Medium这篇文章最初发表于Medium Writing tests represents one of those few stages of software development that is usually overlooked, even though it may be one of the most important one. Developers mention it and usuall…

java ews_Java---使用EWS 写个ExchangeMailUtil

依赖包&#xff1a;commons-httpclient-3.1.jarcommons-codec-1.10.jarcommons-logging-1.2.jarjcifs-1.3.17.jar代码示例&#xff1a;创建MailBean类&#xff1a;import java.util.Date;public class MailBean {public BigDecimal getId() {return id;}public void setId(BigD…