相信大家都已经很熟悉八皇后问题了,就是指:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
主要思路:按行进行深度优先搜索,在该行中选取不与前面冲突的位置,继续dfs(row + 1),知道row大于8,打印结果。表达能力差,直接上代码吧
代码如下:
   #include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
const int N = ;
int map[N][N];
int cnt = ; //记录方案数 /************************打印结果********************/
void Display()
{
printf("--------------解决方案 %d :-------------\n",cnt);
for (int i = ; i < N; i++)
{
for (int j = ; j < N; j++)
{
if (map[i][j] == )
cout << '.';
else
cout << '#';
}
printf("\n");
}
} /*********************判断是否与前面冲突****************/
int Check(int row, int col)
{
int flag = ;
if (row == )
return true;
for (int i = ; i < row; i++)
{
for (int j = ; j < N; j++)
{
if (map[i][j] == )
if (j == col || (fabs(row-i) == fabs(col - j)))
flag = ;
}
}
return flag;
} /**************************按行深搜***********************/
void Dfs(int row)
{
if (row == N)
{
cnt++;
Display();
return;
}
for (int col = ; col < N; col++)
{
if (Check(row, col))
{
map[row][col] = ; //标记
Dfs(row + );
map[row][col] = ; //还原,便于下一个搜索
}
}
return;
}
int main()
{
Dfs();
return ;
}

当然由于是按行搜索,可以用一维数组存储状态,可参见https://paste.ubuntu.com/p/qHFDHxjc4v/

2018-05-19

最新文章

  1. web端限时活动逻辑处理总结
  2. JMeter--二、在Windows环境上搭建wordpress
  3. PHP5.3中关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
  4. Communication System(dp)
  5. iOS深入学习(再谈block)
  6. php中关于抽象(abstract)类和抽象方法的问题解析
  7. 制作越狱版本的ipa文件
  8. Cocoapods 64-bit(iPhone5s) 问题解决方案
  9. hdu 2546 典型01背包
  10. C. Captain Marmot (Codeforces Round #271)
  11. 在FFMPEG中使用libRTMP的经验
  12. Element类型和HTML元素获取
  13. Keras实现卷积神经网络
  14. Matlab实现《追光者》简谱
  15. Docker2之Service
  16. ajax之Content-Type决定form-data方式提交还是request-payloud等
  17. Django入门项目实践(下)
  18. zedboard 初使用 -- 工具篇
  19. joel 相关
  20. 构造HTTP请求Header实现“伪造来源IP”(转)

热门文章

  1. java继承使用的细节问题?
  2. 反射(type和assembly)
  3. PHP注释-----PHPDOC
  4. poj1144 tarjan求割点
  5. Noip2016day1 天天爱跑步running
  6. HTTPRunner实践二——数据驱动
  7. git 的基本设置以及使用
  8. 进击JavaScript核心 --- (1)基本数据类型
  9. PHP 扩展篇 _ 持续更新
  10. js根据等号(=)前名称获取参数值