桐桐的数学游戏(N皇后)
题目描述
相信大家都听过经典的“八皇后”问题吧?这个游戏要求在一个8×8的棋盘上放置8个皇后,使8个皇后互相不攻击(攻击的含义是有两个皇后在同一行或同一列或同一对角线上)。
桐桐对这个游戏很感兴趣,也很快解决了这个问题。可是,他想为自己增加一点难度,于是他想求出n皇后的解的情况。
你能帮助她吗?
输入输出格式
输入格式:
一行,仅有一个数n(1≤n≤14),表示为n皇后问题。
输出格式:
输出仅有一个数,表示n皇后时问题的解法总数。
输入输出样例
8
92
思路:
从第一行开始放置每一个皇后,并标记所在的列和对角线。
初始代码:
//程序名:新的C++程序
//作者: #include<iostream>
#include<fstream>
#include<algorithm> using namespace std;
int n,b[],c[],d[],t;
void ch(int j,int i,int s)
{
b[i]=j;
c[i+s]=j;
d[i-s+n-]=j;
}
void dfs(int s)
{
if(s==n+){t++;return;}
for(int i=;i<=n;i++)
{
if(!b[i]&&!c[i+s]&&!d[i-s+n-])
{
ch(,i,s);
dfs(s+);
ch(,i,s);
}
}
}
int main()
{
cin>>n;
dfs();
cout<<t; return ;
}
代码
发现当n=14时,用时超过1秒。
可以利用放置方法的对称性解决问题。
解决方案: 1.当n为偶数时,第一个皇后只放在左侧,最后再把结果乘2.
//程序名:新的C++程序
//作者: #include<iostream>
#include<fstream>
#include<algorithm>
#include<ctime> using namespace std;
int n,a[],b[],c[],d[],t,m;
void dfs(int s)
{
if(s==n+){t++;return;}
if(n%==)
if(s==)
for(int i=;i<=m;i++)
{
if(!b[i]&&!c[i+s]&&!d[i-s+n-])
{
a[s]=i;
b[i]=;
c[i+s]=;
d[i-s+n-]=;
dfs(s+);
b[i]=;
c[i+s]=;
d[i-s+n-]=;
}
}
else
for(int i=;i<=n;i++)
{
if(!b[i]&&!c[i+s]&&!d[i-s+n-])
{
a[s]=i;
b[i]=;
c[i+s]=;
d[i-s+n-]=;
dfs(s+);
b[i]=;
c[i+s]=;
d[i-s+n-]=;
}
}
else
for(int i=;i<=n;i++)
{
if(!b[i]&&!c[i+s]&&!d[i-s+n-])
{
a[s]=i;
b[i]=;
c[i+s]=;
d[i-s+n-]=;
dfs(s+);
b[i]=;
c[i+s]=;
d[i-s+n-]=;
}
}
}
int main()
{
cin>>n;
m=n/;
dfs();
if(n%==)cout<<t;
else cout<<t*; return ;
}
代码
2.当n为偶数时,第一个皇后只放在左侧,反之第一个皇后放在左侧及中线,第二个放在其左边。最后再把结果乘2.
//程序名:新的C++程序
//作者: #include<iostream>
#include<fstream>
#include<algorithm>
#include<ctime> using namespace std;
int n,a[],b[],c[],d[],t;
void dfs(int s,int k)
{
if(s==n+){t++;return;}
for(int i=;i<=k;i++)
{
if(!b[i]&&!c[i+s]&&!d[i-s+n-])
{
a[s]=i;
b[i]=;
c[i+s]=;
d[i-s+n-]=;
if(n%==&&a[]==(n+)/&&s==)dfs(,(n+)/-);
else dfs(s+,n);
b[i]=;
c[i+s]=;
d[i-s+n-]=;
}
}
}
int main()
{
cin>>n;
dfs(,(n+)/);
cout<<t*; return ;
}
代码
桐桐的数学游戏(N皇后)的更多相关文章
- Java实现桐桐的数学难题
桐桐的数学难题 题目描述 今天数学课上,桐桐学习了质数的知识:一个正整数如果只能被1和它本身整除,那么这个整数便是质数.桐桐就想:任意一个正整数是否都能分解成若干个质数相乘的形式呢?输入一个正整数n( ...
- 桐桐的贸易--WA
问题 A: 桐桐的贸易 时间限制: 1 Sec 内存限制: 64 MB提交: 15 解决: 2[提交][状态][讨论版] 题目描述 桐桐家在Allianceance城,好友ROBIN家在Horde ...
- Vijos P1325桐桐的糖果计划
> P1325桐桐的糖果计划 标签:**图结构 强连通分量** 描述 桐桐很喜欢吃棒棒糖.他家处在一大堆糖果店的附近. 但是,他们家的区域经常出现塞车.塞人等情况,这导致他不得不等到塞的车或人走 ...
- vijos1325 桐桐的糖果计划
Description 桐桐是一个快乐的小朋友,他生活中有许多许多好玩的事,让我们一起来看看吧-- 桐桐很喜欢吃棒棒糖.他家处在一大堆糖果店的附近. 但是,他们家的区域经常出现塞车.塞人等情况,这导致 ...
- 桐桐的糖果计划(vijos 1325)
背景 桐桐是一个快乐的小朋友,他生活中有许多许多好玩的事,让我们一起来看看吧…… 描述 桐桐很喜欢吃棒棒糖.他家处在一大堆糖果店的附近. 但是,他们家的区域经常出现塞车.塞人等情况,这导致他不得不等到 ...
- 【2018寒假集训 Day1】【位运算】桐桐的运输方案
桐桐的运输方案(transp) [问题描述] 桐桐有 N 件货物需要运送到目的地,它们的重量和价值分别记为: 重量:W1,W2,…,Wn: 价值:V1,V2,…,Vn: 已知某辆货车的最大载货量为 X ...
- VIJOS-P1325 桐桐的糖果计划
VIJOS-P1325 桐桐的糖果计划 JDOJ 1432 桐桐的糖果计划 https://neooj.com/oldoj/problem.php?id=1432 Description 桐桐很喜欢吃 ...
- 20180606模拟赛T4——数学游戏
数学游戏 题目描述: 小T又发脑残了,没错,她又要求奇怪的东西,这次她想知道[X,Y]之间整数有多少可以表示成K个不同的B的幂的和形势.如\(x,y,k,b=15,20,2,2\),则有: \[17= ...
- Vijos P1325桐桐的糖果计划(有向图双连通分量)
/*重边不能删 不能删 不能删...*/ #include<iostream> #include<cstdio> #include<cstring> #define ...
随机推荐
- 【原创】大数据基础之Benchmark(1)HiBench
HiBench 7官方:https://github.com/intel-hadoop/HiBench 一 简介 HiBench is a big data benchmark suite that ...
- Linux学习之CentOS(一)--CentOS6.4环境搭建
Linux学习之CentOS(一)--CentOS6.4环境搭建http://www.cnblogs.com/xiaoluo501395377/archive/2013/03/31/CentOs.ht ...
- python-函数入门(一)
1.什么是函数: 可重复使用的,用来实现单一,或相关联功能的代码段. 函数分为内置函数和自定义函数,这里先讲自定义函数 2.如何定义函数: #语法 def 函数名(参数1,参数2,参数3,...): ...
- Confluence 6 Oracle 驱动输入你的数据库细节
Confluence 的安装向导将会指导你一步一步的在 Confluence 中配置安装 Oracle 数据库. 使用 JDBC 连接(默认) JDBC 是推荐的连接你的 Confluence 到数据 ...
- ionic3 点击输入 框弹出白色遮罩 并把 界面顶到上面
这个蛋疼 问题 ,在android 上面遇到这种情况 ,键盘弹出的时候 总有一个白色的遮罩在后面出现,网上查了很久都没发现原因. 偶然发现一个方法 ,试下了下 问题解决了. 代码如下: IonicMo ...
- 基于Web的漏洞利用
1.Nikto 基于Web的漏洞信息扫描 nikto 自动扫描web服务器上没有打补丁的软件,同时同时也检测驻留在服务器上的危险文件,nikto能够识别出特定的问题,检测服务器的配置问题, 检测某台主 ...
- bzoj 2669 题解(状压dp+搜索+容斥原理)
这题太难了...看了30篇题解才整明白到底咋回事... 核心思想:状压dp+搜索+容斥 首先我们分析一下,对于一个4*7的棋盘,低点的个数至多只有8个(可以数一数) 这样的话,我们可以进行一个状压,把 ...
- JS:事件循环机制、调用栈以及任务队列
点击查看原文 写在前面 js里的事件循环机制十分有趣.从很多面试题也可以看出来,考察简单的setTimeout也就是考察这个机制的. 在之前,我只是简单地认为由于函数执行很快,setTimeout执行 ...
- asp.net core 自定义404等友好错误页面
Home控制器里: [Route("Home/Error/{statusCode}")] public IActionResult Error(int statusCode) { ...
- 滴水穿石-07Java开发中常见的错误
1:使用工具Eclipse 1.1 "语法错误" 仅当源级别为 1.5 时已参数化的类型才可用 设置eclipse,窗口—>java—>编译器—>JDK一致性调到 ...