DFS解八皇后问题
来源:互联网 发布:cad可以画网络拓扑图吗 编辑:程序博客网 时间:2024/05/16 17:14
仔细思考深度优先搜索其实可以分为大概四步.
1.发现,找到想要找的节点,如八皇后就是找到当前行放置皇后的那个点,马走日就是下一步的落点.
2.递进,如果不满足结束条件就继续递归,进入下一层.如八皇后问题就是进入下一行.
3.满足,条件满足了之后,就输出结果,一般都是用一个全局变量来控制数量,一旦==N,就输出结果.
4.返回,dfs得回溯才能遍历所有的结果.
问题描述
八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?
也就是说,使得棋盘中每个横向、纵向、左上至右下斜向、右上至左下斜向均只有一枚皇后。
代码如下:
#include"stdio.h"#include"math.h"const int N = 8;int a[N] = {0};int solution = 0;bool isok(int row,int col)//判断这个位置是否可以放置皇后{for (int i = 0; i < row; i++){//a[i]的值代表着列,i代表着行,所以重0开始遍历验证行和列有没有重复的if(a[i] == col || abs(a[i] - col) == row - i){return false;}}}void Display()//如果数组中个数到达了N个则输出,相当于dfs的结束条件{printf("第%d种解: \n",++soulution);for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){if (a[i] == j){printf("%d",i);}else{printf("#");}}printf("\n");}printf("---------------------\n");}/*从0,0这个位置开始循环,因为注定每一行都会有一个皇后,所以在第0行就有8种放法,之后依次下移.相当于递归,结束条件就是row=N-1,也就是每一行都放了一个皇后,相当于一种解法.*/void DFS(int row){for(int col = 0;col < N;col++){if (isok(row,col)){a[row] = col;if (row != N-1){DFS(row + 1);}else{Display();}}}}int main(){DFS(0);return 0;}
0 0
- DFS解八皇后问题
- 八皇后问题(DFS)
- 八皇后问题 DFS
- 八皇后问题 DFS
- 八皇后问题-DFS
- 八皇后问题 DFS
- 八皇后问题DFS解法
- Dfs回溯-八皇后问题
- 八皇后问题:DFS剪枝
- 八皇后问题(DFS剪枝)
- 八皇后问题-回溯-DFS
- hdu 1045 zoj1002 八皇后问题 dfs
- 八皇后问题(dfs常规解法)
- hdu2553八皇后问题(DFS)
- 解八皇后问题
- 八皇后改DFS
- DFS之八皇后
- 八皇后(dfs)
- HDU 3232 && UVA 12230 (简单期望)
- HDU 5400 Arithmetic Sequence(数学,容斥)
- 华为机试题:字符串最后一个单词的长度
- UVA - 11082 Matrix Decompressing(最大流+行列模型)
- 【DirectX 2D游戏编程基础】directx 精灵绘图的应用,锚点与变换
- DFS解八皇后问题
- UVALive - 3268 Jamie's Contact Groups(二分+最大流)
- AJAX一些常用操作
- Round A APAC Test 2016 Problem D. gSnake 贪吃蛇 stl应用
- 阅读laravel源代码有感
- 《数据结构与算法分析》图论算法--邻接表与拓扑排序
- FAAC转换PCM为AAC
- Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题
- cocos2d-x实现3D模型的换装系统的研究