在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

因为我们要保证每个皇后不在同一个对角线,不在一行,不在一列

所以我们每次把第k个皇后放在第k行,即保证每个皇后都不在同一行

接下来我们要判断每个皇后是否在一列或者对角线即可

我们设一个queen数组表示每个皇后所放位置所在列

prey == ny || prey-prex == ny-nx || prey + prex == ny + nx

如果以上条件都不成立,那么皇后k的放置就是合理的

 #include<iostream>
#include<cstdio>
int Queen[],n;
int dp[];
int dfs(int k)
{
if (k>n)
return ;
int ans = ;
for (int i = ;i<= n ;i++)
{
int nx = k, ny = i;//把第k个皇后放在第k行
bool isOk = true;
for (int j = ; j< k && isOk ;j++)
{
int prex = j, prey = Queen[j];//放过的皇后
if (prey == ny || prey-prex == ny-nx || prey + prex == ny + nx)//在同一列、一个对角线 不合法
isOk = false;
}
if (isOk)
{
Queen[k] = i;//k个皇后在k行i列
ans += dfs(k+);
}
}
return ans;
}
int main()
{
while(scanf ("%d",&n)&&n!=)
{
//缩短时间
if (dp[n]==)
dp[n]=dfs();
printf ("%d\n",dp[n]);
}
return ;
}

最新文章

  1. HTML5移动端图片左右切换动画
  2. Python:集合
  3. node.js中log4js的使用
  4. Android UiAutomator 自动化测试一些代码实例---新手3
  5. 项目管理和版本跟踪——Redmine和SVN的结合
  6. Hibernate 二级缓存配置出现的异常
  7. 转:LoadRunner自带的协议分析工具
  8. Git和Github的配合使用
  9. selenium+python环境的搭建的自动化测试
  10. python学习===实现定时发送,方法一
  11. sqlserver2012 密码过期问题
  12. portscaner 多线程、多协程并发端口扫描
  13. EF Core中的多对多映射如何实现?
  14. 为什么实数系里不存在最小正数?(Why the smallest positive real number doesn&#39;t exist in the real number system ?)
  15. MAC配置DNS服务器
  16. SOA:A note on RPC
  17. centos7 安装java和tomcat9
  18. Selenium2+python自动化33-文件上传(send_keys)
  19. PHP扩展--taint检测隐藏漏洞
  20. HTML中label的两种使用方法

热门文章

  1. JavaWeb开发校园二手平台项目 源码
  2. hdu4632 Palindrome subsequence 回文子序列个数 区间dp
  3. springMVC:SSM整合
  4. hadoop yarn 实战错误汇总
  5. cf 261B.Maxim and Restaurant
  6. 刷题48. Rotate Image
  7. eclipse导入maven工程,右键没有build path和工程不能自动编译解决方法
  8. Angular js 复制粘贴
  9. SASS - 操作符
  10. java使用BigDecimal 实现随机金额红包拆分算法