数据结构经典算法(8)八皇后
来源:互联网 发布:君麻吕实力 知乎 编辑:程序博客网 时间:2024/06/03 22:49
说明:西洋棋中的皇后可以直线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八
个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstra与N.Wirth曾经用这个问 题来讲解程式设计之技巧。
解法关于棋盘的问题, 都可以用递回求解, 然而如何减少递回的次数?在八个皇后的问题,中
不必要所有的格子都检查过,例如若某列检查过,该该列的其它格子就不用再检查了,这个方 法称为分支修剪。
#include <iostream>#include <cmath>#include <cstring>using namespace std;int queen[9];//数组初始化void init(){ memset(queen,0,9*sizeof(int));}//输出结果void print(){ for(int i=1; i<9; i++) cout<<queen[i]<<" "; cout<<endl;}//剪枝函数bool canPlaceQueen(int k){ for(int i = 1; i < k; i++) { //判断是否处于同一列或同一斜线 if(queen[i] == queen[k] || abs(k-i) == abs(queen[k]-queen[i])) return false; } return true;}//迭代方法求解八皇后过程void eightQueen_1(){ int k = 1; while(k>=1) { while(queen[k]<=7) { queen[k] += 1; if(k == 8 && canPlaceQueen(k)) { print(); } else if(canPlaceQueen(k)) { k++; } } queen[k] = 0; k--; }}//递归方法求解八皇后过程void eightQueen_2(int k){ for(int i=1; i<9; i++) { queen[k] = i; if(k == 8 && canPlaceQueen(k)) { print(); return; } else if(canPlaceQueen(k)) { eightQueen_2(k+1); } }}int main(){ init(); eightQueen_1();// eightQueen_2(1); return 0;}
0 0
- 数据结构经典算法(8)八皇后
- 数据结构-八皇后算法
- 经典回溯算法(八皇后问题)
- 八皇后问题(经典回溯算法)
- 数据结构经典算法学习之八皇后01
- 【经典算法】八皇后问题
- 八皇后问题(参考算法竞赛入门经典)
- 经典回溯算法(八皇后问题)详解
- 经典回溯算法(八皇后问题)详解
- 数据结构(八皇后问题)
- 经典游戏算法之八皇后
- 经典算法之八皇后问题
- 经典算法问题——八皇后
- 【经典算法】八皇后问题C#版
- 经典算法之八皇后问题
- 经典算法问题-01-八皇后
- 八皇后问题(经典回溯算法)
- C++数据结构--回溯算法--八皇后问题
- 常用ColorMatrixFilter收集
- git commit 提交最新更改
- Java正则表达式Pattern和Matcher
- IE默认连接首页被恶意修改解决办法
- LeetCode之Sum Root to Leaf Numbers
- 数据结构经典算法(8)八皇后
- 中大-复试-2011-编程题二
- pthread编程基础
- Internet路由-主机路由表和转发表
- 网络百科——交换机
- 删除rac中ASM实例
- u014331702
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- Android项目怎么使用外部工程作为jar包