现在的位置: 首页 > 综合 > 正文

八皇后问题

2017年12月19日 ⁄ 综合 ⁄ 共 3595字 ⁄ 字号 评论关闭

 

  1. #include "stdio.h"  
  2. #define num 8  
  3. int a[num][num],count=0;  
  4. FILE *fw;        
  5.  
  6. int judge()  
  7. {  
  8.     int aa=0,bb=0;  
  9.     int i,j,num1=0;  
  10.     ////////////////横排不用判断  
  11.     for (i=0;i<num;i++)//判断竖排  
  12.     {  
  13.         for (j=0;j<num;j++)  
  14.         {  
  15.             if (a[j][i]==1)  
  16.                 num1++;  
  17.         }  
  18.         if(num1>1)  
  19.             return 0;  
  20.         else 
  21.             num1=0;  
  22.     }  
  23.     num1=0;  
  24.     for (i=0;i<num;i++)//第一排向下  
  25.     {  
  26.         num1=0;  
  27.         aa=0;  
  28.         bb=i;  
  29.         while(bb>=0)//斜向左下  
  30.         {  
  31.             if(a[aa][bb]==1)  
  32.                 num1++;  
  33.             if(num1>1)  
  34.                 return 0;  
  35.             aa++;  
  36.             bb--;  
  37.         }  
  38.         aa=0;  
  39.         bb=i;  
  40.         num1=0;  
  41.         while(bb<num)//斜向右下  
  42.         {  
  43.             if(a[aa][bb]==1)  
  44.                 num1++;  
  45.             if(num1>1)  
  46.                 return 0;  
  47.             aa++;  
  48.             bb++;  
  49.         }  
  50.     }  
  51.     ///////  
  52.     num1=0;  
  53.     for(i=0;i<num;i++)//最后一排向上  
  54.     {  
  55.         num1=0;  
  56.         aa=num-1;  
  57.         bb=i;  
  58.         while(bb<num)//斜向右上  
  59.         {  
  60.             if(a[aa][bb]==1)  
  61.                 num1++;  
  62.             if(num1>1)  
  63.                 return 0;  
  64.             aa--;  
  65.             bb++;  
  66.         }  
  67.         aa=num-1;  
  68.         bb=i;  
  69.         num1=0;  
  70.         while(bb>=0)//斜向左上  
  71.         {  
  72.             if(a[aa][bb]==1)  
  73.                 num1++;  
  74.             if(num1>1)  
  75.                 return 0;  
  76.             aa--;  
  77.             bb--;  
  78.         }  
  79.     }  
  80.     return 1;  
  81.       
  82. }  
  83. void init()  
  84. {  
  85.     int i,j;  
  86.     for (i=0;i<num;i++)  
  87.         for (j=0;j<num;j++)  
  88.             a[i][j]=0;  
  89. }  
  90. void main()  
  91. {  
  92.     fw = fopen("b.txt","a");//以追加方式写入   
  93.     int i,j,c[num];  
  94.     init();  
  95.     for (c[0]=0;c[0]<num;c[0]++)  
  96.         for (c[1]=0;c[1]<num;c[1]++)  
  97.             for (c[2]=0;c[2]<num;c[2]++)  
  98.                 for (c[3]=0;c[3]<num;c[3]++)  
  99.                     for (c[4]=0;c[4]<num;c[4]++)  
  100.                         for (c[5]=0;c[5]<num;c[5]++)  
  101.                             for (c[6]=0;c[6]<num;c[6]++)  
  102.                                 for (c[7]=0;c[7]<num;c[7]++)  
  103.                                 {  
  104.                                     a[0][c[0]]=1;  
  105.                                     a[1][c[1]]=1;  
  106.                                     a[2][c[2]]=1;  
  107.                                     a[3][c[3]]=1;  
  108.                                     a[4][c[4]]=1;  
  109.                                     a[5][c[5]]=1;  
  110.                                     a[6][c[6]]=1;  
  111.                                     a[7][c[7]]=1;  
  112.                                     if(judge()==1)  
  113.                                     {  
  114.                                         count++;  
  115.                                         fprintf(fw,"第%d种\n",count);  
  116.                                         printf("第%d种\n",count);  
  117.                                         for(i=0;i<num;i++)  
  118.                                         {         
  119.                                             for (j=0;j<num;j++)  
  120.                                             {  
  121.                                                 fprintf(fw,"%d ",a[i][j]);  
  122.                                                 printf("%d ",a[i][j]);  
  123.                                             }  
  124.                                             fprintf(fw,"\n");  
  125.                                             printf("\n");  
  126.                                         }  
  127.                                         fprintf(fw,"\n");  
  128.                                         printf("\n");  
  129.                                     }  
  130.                                     init();  
  131.                                 }  
  132.     printf("%d\n",count);  
  133.     fprintf(fw,"一共%d种\n",count);  

 

 

 

本文出自 “阿凡达” 博客,转载请与作者联系!

抱歉!评论已关闭.