经典问题“八皇后”的解法

来源:互联网 发布: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>
原创粉丝点击