八皇后问题

#include "stdio.h"  
#include "time.h"  #define num 8 int a[num][num],count=0; FILE *fw; int judge() { int aa=0,bb=0; int i,j,num1=0; ////////////////横排不用判断 for (i=0;i<num;i++)//判断竖排 { for (j=0;j<num;j++) { if (a[j][i]==1) num1++; } if(num1>1) return 0; else num1=0; } num1=0; for (i=0;i<num;i++)//第一排向下 { num1=0; aa=0; bb=i; while(bb>=0)//斜向左下 { if(a[aa][bb]==1) num1++; if(num1>1) return 0; aa++; bb--; } aa=0; bb=i; num1=0; while(bb<num)//斜向右下 { if(a[aa][bb]==1) num1++; if(num1>1) return 0; aa++; bb++; } } /////// num1=0; for(i=0;i<num;i++)//最后一排向上 { num1=0; aa=num-1; bb=i; while(bb<num)//斜向右上 { if(a[aa][bb]==1) num1++; if(num1>1) return 0; aa--; bb++; } aa=num-1; bb=i; num1=0; while(bb>=0)//斜向左上 { if(a[aa][bb]==1) num1++; if(num1>1) return 0; aa--; bb--; } } return 1; } void init() { int i,j; for (i=0;i<num;i++) for (j=0;j<num;j++) a[i][j]=0; } void main() {
  

  clock_t start;
  clock_t end;
  start =time(NULL);

      fw = fopen("b.txt","a");//以追加方式写入   

    int i,j,c[num];  
    init();  
    for (c[0]=0;c[0]<num;c[0]++)  
        for (c[1]=0;c[1]<num;c[1]++)  
            for (c[2]=0;c[2]<num;c[2]++)  
                for (c[3]=0;c[3]<num;c[3]++)  
                    for (c[4]=0;c[4]<num;c[4]++)  
                        for (c[5]=0;c[5]<num;c[5]++)  
                            for (c[6]=0;c[6]<num;c[6]++)  
                                for (c[7]=0;c[7]<num;c[7]++)  
                                {  
                                    a[0][c[0]]=1;  
                                    a[1][c[1]]=1;  
                                    a[2][c[2]]=1;  
                                    a[3][c[3]]=1;  
                                    a[4][c[4]]=1;  
                                    a[5][c[5]]=1;  
                                    a[6][c[6]]=1;  
                                    a[7][c[7]]=1;  
                                    if(judge()==1)  
                                    {  
                                        count++;  
                                        fprintf(fw,"第%d种
",count);  
                                        printf("第%d种
",count);  
                                        for(i=0;i<num;i++)  
                                        {         
                                            for (j=0;j<num;j++)  
                                            {  
                                                fprintf(fw,"%d ",a[i][j]);  
                                                printf("%d ",a[i][j]);  
                                            }  
                                            fprintf(fw,"
");  
                                            printf("
");  
                                        }  
                                        fprintf(fw,"
");  
                                        printf("
");  
                                    }  
                                    init();  
                                }  
    printf("%d
",count);  
    fprintf(fw,"一共%d种
",count); 

end = time(NULL);
printf(" 程序运行所用时间%d秒 ",end-start);

 
} 
 
//本文出自 “阿凡达” 博客,转载请与作者联系!
原文地址:https://www.cnblogs.com/umgsai/p/3908229.html