用dfs求解八皇后问题
2024-09-01 01:14:39
相信大家都已经很熟悉八皇后问题了,就是指:在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
最新文章
- web端限时活动逻辑处理总结
- JMeter--二、在Windows环境上搭建wordpress
- PHP5.3中关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- Communication System(dp)
- iOS深入学习(再谈block)
- php中关于抽象(abstract)类和抽象方法的问题解析
- 制作越狱版本的ipa文件
- Cocoapods 64-bit(iPhone5s) 问题解决方案
- hdu 2546 典型01背包
- C. Captain Marmot (Codeforces Round #271)
- 在FFMPEG中使用libRTMP的经验
- Element类型和HTML元素获取
- Keras实现卷积神经网络
- Matlab实现《追光者》简谱
- Docker2之Service
- ajax之Content-Type决定form-data方式提交还是request-payloud等
- Django入门项目实践(下)
- zedboard 初使用 -- 工具篇
- joel 相关
- 构造HTTP请求Header实现“伪造来源IP”(转)