经典问题“八皇后”的解法
来源:互联网 发布:python数据挖掘入门 编辑:程序博客网 时间:2024/05/21 06:54
八皇后问题,是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。
1 #include<stdio.h> 2 void fun(int i,int j); 3 static b[8][8]; 4 void main() 5 { 6 fun(0,0); 7 8 } 9 int knock(int i,int j)10 {int temp_i,temp_j,k;11 temp_i=i;temp_j=j;12 for(i=i-1;i>=0;i--)13 if(b[i][j]==1)14 return 1;15 for(i=temp_i-1,k=temp_j+1,j=temp_j-1;i>=0;i--,j--,k++)16 {if(j>=0&&b[i][j]==1)17 return 1;18 if(k<8&&b[i][k]==1)19 return 1;20 }21 return 0;22 }23 void cls(int i)24 {int j;25 for(;i<8;i++)26 {27 for(j=0;j<8;j++)28 b[i][j]=0;29 }30 31 }32 void print(void)33 {int i,j;static int n=1;34 printf("--------------------------\n第%d种\n",n++);35 for(j=0;j<8;j++)36 {37 for(i=0;i<8;i++)38 {if(b[i][j]==1)39 printf("* ");40 else41 printf("0 ");42 }43 printf("\n");44 45 }46 printf("\n");// getchar();47 }48 void fun(int i,int j)49 {if(i<8)50 {51 for(;j<8;j++)52 {cls(i);53 if(knock(i,j)==1)54 continue;55 b[i][j]=1; 56 fun(i+1,0);57 }58 59 }60 else61 print();62 }
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 经典问题“八皇后”的解法
- 八皇后问题的解法
- Queen 八皇后问题 回溯经典解法
- 八皇后问题解法
- 八皇后问题解法
- 八皇后问题解法
- 八皇后问题解法
- 八皇后问题的递归解法
- 八皇后问题的位操作解法
- 八皇后问题的两种解法
- 八皇后问题的一种解法
- 关于八皇后问题的解法
- 八皇后问题的解法一
- 八皇后问题的全排列解法
- 八皇后问题的非递归解法
- 八皇后问题的两种解法
- "八皇后"问题的解法(1)
- 八皇后问题的分析与解法
- 《学习OpenCV》练习题第三章第三题
- Spring如何处理线程并发
- 复杂产品的响应式设计【流程篇】
- 为什么我们说海量数据处理技术会火
- 03-孤独的北漂生活
- 经典问题“八皇后”的解法
- IO中同步、异步与阻塞、非阻塞的区别
- watir-webdriver中的动态等待方法
- 微机原理及应用习题库与答案
- Android实现推送方式解决方案
- web.xml详解
- 毕业论文答辩技巧详解(毕业生必备)
- 求回文数
- 在黑莓窗口间传递数据的方法