经典问题“八皇后”的解法
2013-04-07 08:19
169 查看
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
#include<stdio.h> void fun(int i,int j); static b[8][8]; void main() { fun(0,0); } int knock(int i,int j) {int temp_i,temp_j,k; temp_i=i;temp_j=j; for(i=i-1;i>=0;i--) if(b[i][j]==1) return 1; for(i=temp_i-1,k=temp_j+1,j=temp_j-1;i>=0;i--,j--,k++) {if(j>=0&&b[i][j]==1) return 1; if(k<8&&b[i][k]==1) return 1; } return 0; } void cls(int i) {int j; for(;i<8;i++) { for(j=0;j<8;j++) b[i][j]=0; } } void print(void) {int i,j;static int n=1; printf("--------------------------\n第%d种\n",n++); for(j=0;j<8;j++) { for(i=0;i<8;i++) {if(b[i][j]==1) printf("* "); else printf("0 "); } printf("\n"); } printf("\n");// getchar(); } void fun(int i,int j) {if(i<8) { for(;j<8;j++) {cls(i); if(knock(i,j)==1) continue; b[i][j]=1; fun(i+1,0); } } else print(); }
相关文章推荐
- 经典问题“八皇后”的解法
- Queen 八皇后问题 回溯经典解法
- 【C/C++】回溯经典算法之-->八皇后问题
- 八皇后问题的全排列解法
- 八皇后问题N种解法(转)
- 【BFS】由八数码问题的BFS解法引出的三种BFS经典状态判重方法
- 经典八皇后问题;
- 八皇后问题回溯解法
- 老问题新解法——经典的大兔子生小兔子问题(斐波那契数列)
- 回溯法经典问题-八皇后
- 逆序对问题的另一种经典解法:归并排序
- 串匹配问题经典解法
- 面试经典之剑指offer--58--八皇后问题
- 八皇后问题的两种解法
- 八皇后问题的分析与解法
- hdu 2553 N皇后问题 经典搜索,DFS解法
- 经典算法问题-01-八皇后
- [算法]经典算法8皇后(N皇后)问题的解法,C语言实现
- 多维算法思考(二):关于八皇后问题解法的探讨
- 八皇后问题 递归解法