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