N皇后问题是DFS的代表性问题,其最难的地方就是在判重这里,想明白了怎么判重的话问题就很显然了。

这里给出两份代码,其中第一份代码的效率更好,就是在判重上下了功夫。当然,我记得还有使用位运算进行判重的方法,这里就先不介绍了。

首先是第一份代码,二维数组直接进行判重。

 #include<iostream>
using namespace std;
int n,ans=;
int a[],v[][];
void dfs(int dp)
{
if(dp>n)
{
ans++;
return;
}
for(int i=;i<n;i++)
if(!v[][i]&&!v[][dp+i]&&!v[][dp-i+n])
{
v[][i]=v[][dp+i]=v[][dp-i+n]=;
dfs(dp+);
v[][i]=v[][dp+i]=v[][dp-i+n]=;
}
}
int main()
{
cin>>n;
dfs();
cout<<ans;
return ;
}

第二份代码的判重思路还是很容易看懂的,只不过效率不如第一份代码的好。

 #include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
const int maxn=;
int n;
int ans=;
int c[maxn];
bool check(int x)
{
for(int i=;i<x;i++)
{
if(c[x]==c[i]||x-c[x]==i-c[i]||x+c[x]==i+c[i])
return false;
}
return true;
}
void dfs(int dp)
{
if(dp>n)
{
ans++;
return;
}
for(int i=;i<=n;i++)
{
c[dp]=i;
if(check(dp))
dfs(dp+);
c[dp]=;
}
}
int main()
{
cin>>n;
dfs();
cout<<ans<<endl;
return ;
}

最新文章

  1. zabbix监控单核cpu使用率和多核cpu总负载
  2. ios UITextView 计算文字内容大小
  3. paip.提升性能----java 无锁结构(CAS, Atomic, Threadlocal, volatile, 函数式编码, 不变对象)
  4. 夺命雷公狗---DEDECMS----11dedecms字段标签
  5. h5新增标签兼容性
  6. mysql 查询随机条记录的sql语句和php计算概率
  7. [OC Foundation框架 - 17] copy语法
  8. pair/sort/find/qsort
  9. oracle ORA-00913: 值过多
  10. Linux 高速操作IOport
  11. this的指向问题
  12. 基于div表单模拟右对齐
  13. IE 兼容 getElementsByClassName
  14. [ZJOI2015]幻想乡战略游戏
  15. 深度学习之自编码器AutoEncoder
  16. 使用ML.NET实现NBA得分预测
  17. PYTHON使用入门
  18. Vue提供操作DOM的方法
  19. MySql事务select for update及数据的一致性处理讲解
  20. IIS 6.0上部署ASP.NET MVC2.0

热门文章

  1. POJ 1755 Triathlon(线性规划の半平面交)
  2. iconFont 阿里巴巴矢量图标使用方法
  3. Python字符串格式化表达式和格式化方法
  4. Alpha冲刺——第四天
  5. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别
  6. 修改IntelliJ IDEA字体
  7. Linux服务器记录并查询历史操作记录
  8. BZOJ 1854 游戏(二分图匹配或并查集)
  9. C# 面向对象——继承
  10. 【刷题】洛谷 P2764 最小路径覆盖问题