回溯递归算法----八皇后问题
2015-07-02 19:26
302 查看
前,有皇帝。就拿八皇后。由此产生的一系列问题,凌乱。由此产生的八皇后问题。哈哈
开玩笑~~~~
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即随意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
高斯觉得有76种方案。
1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法能够解决此问题。
详细算法:
结果:八皇后共同拥有92中解法,这里就不一一的列出来了。
详细看自己的执行结果吧~~~~~
开玩笑~~~~
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即随意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
高斯觉得有76种方案。
1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法能够解决此问题。
详细算法:
#include "stdafx.h" #include <stdlib.h> #define N 8 typedef struct _tag_Pos { int ios; int jos; } Pos; static char board[N+2][N+2]; static Pos pos[] = { {-1, -1}, {-1, 0}, {-1, 1} }; static int count = 0; void init() { int i = 0; int j = 0; for(i=0; i<N+2; i++) { board[0][i] = '#'; board[N+1][i] = '#'; board[i][0] = '#'; board[i][N+1] = '#'; } for(i=1; i<=N; i++) { for(j=1; j<=N; j++) { board[i][j] = ' '; } } } void display() { int i = 0; int j = 1; for(i=0; i<N+2; i++) { for(j=0; j<N+2; j++) { printf("%c", board[i][j]); } printf("\n"); } } int check(int i, int j) { int ret = 1; int p = 0; for(p=0; p<3; p++)//在三个方向寻找 { int ni = i; int nj = j; while( ret && (board[ni][nj] != '#') ) { ni = ni + pos[p].ios; nj = nj + pos[p].jos; ret = ret && (board[ni][nj] != '*'); } } return ret; } void find(int i) { int j = 0; if( i > N ) { count++; printf("Solution: %d\n", count); display(); getchar(); } else { for(j=1; j<=N; j++) { if( check(i, j) ) { board[i][j] = '*'; find(i+1); board[i][j] = ' '; } } } } int main() { init(); find(1); system("pause"); return 0; }
结果:八皇后共同拥有92中解法,这里就不一一的列出来了。
详细看自己的执行结果吧~~~~~
相关文章推荐
- NYOJ 218 Dinner
- 孤儿进程和僵尸进程
- NYOJ 19 擅长排列的小明(dsf STL——next_permutation函数)
- 计算几何基本知识整理
- QDataStream对QVector的序列化
- TCP 组播 广播
- Spyder常用环境working directory设置
- poj 3616 奶牛产奶时间间隔dp
- 读博分析
- OC - 类目、延展、协议
- java学习06--比较运算符和逻辑运算符
- 【Web探索之旅】第四部分:Web程序员
- Nginx 在windows下配合iis搭建负载均衡过程
- android开发,设置listview的高度无效
- MYSQL远程访问设置
- 解读Cardinality Estimation算法(第三部分:LogLog Counting)
- iOS9适配系列教程
- iOS9适配系列教程
- 【Web探索之旅】第三部分第三课:协议
- AMD Geode GX processor L1 DCache扩容验证方法