八皇后

  1 #include<stdio.h>
  2 int count = 0;
  3 FILE *fp;
  4 
  5 int notDanger(int row,int j,int (*chess)[8]) {
  6     int i,k,flag1 =0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0;
  7     //判断列方向
  8     for (i = 0; i<8; i++) {
  9         if(*(*(chess+i)+j) !=0) {
 10             flag1=1;
 11             break;
 12         }
 13     }
 14     //判断左上方
 15     for (i = row , k = j; i>=0 && k>=0 ; i--,k--) {
 16         if(*(*(chess+i)+k) != 0) {
 17             flag2 = 1;
 18             break;
 19         }
 20     }
 21 
 22      //判断右下方
 23     for (i = row , k = j; i<8 && k<8 ; i++,k++) {
 24         if(*(*(chess+i)+k) != 0) {
 25             flag3 = 1;
 26             break;
 27         }
 28     }
 29 
 30 
 31      //判断右上方
 32     for (i = row , k = j; i>=0 && k<8 ; i--,k++) {
 33         if(*(*(chess+i)+k) != 0) {
 34             flag4 = 1;
 35             break;
 36         }
 37     }
 38 
 39 
 40      //判断左下方
 41     for (i = row , k = j; i<8 && k>=0 ; i++,k--) {
 42         if(*(*(chess+i)+k) != 0) {
 43             flag5 = 1;
 44             break;
 45         }
 46     }
 47     if( flag1 || flag2 || flag3 || flag4 || flag5) {
 48         return 0;
 49     }
 50     else {
 51         return 1;
 52     }
 53 
 54 }
 55 
 56 void EightQueen(int row,int n,int(*chess)[8]) {
 57     int chess2[8][8];
 58     int i,j;
 59     for ( i= 0 ; i<8 ; i++) {
 60         for (j=0; j<8; j++){
 61             chess2[i][j] = chess[i][j];
 62         }
 63     }
 64     if(8 == row) {
 65         printf("第 %d 种\n",count+1);
 66         fprintf(fp,"第 %d 种\n",count+1);
 67         for (i=0 ; i<8 ; i++) {
 68             for (j=0; j<8 ; j++) {
 69                 printf("%d ", *(*(chess2+i)+j));
 70                 fprintf(fp,"%d ", *(*(chess2+i)+j));
 71             }
 72             printf("\n");
 73             fprintf(fp,"\n");
 74         }
 75         printf("\n");
 76         fprintf(fp,"\n");
 77         count++;
 78     }
 79 
 80     else {
 81         for (j=0; j<n; j++) {
 82             if(notDanger(row,j,chess)) {
 83                 for(i = 0 ; i<8 ; i++) {
 84                     *(*(chess2+row)+i) =0;
 85                 }
 86                 *(*(chess2+row)+j) = 1;
 87 
 88                 EightQueen(row+1,n,chess2);
 89             }
 90         }
 91 
 92     }
 93 
 94 }
 95 
 96 int main() {
 97     int chess[8][8];
 98     int i,j;
 99     fp = fopen("EightQueen.txt","w+a+");
100     for (i= 0 ; i<8 ; i++) {
101         for (j=0; j<8; j++){
102             chess[i][j] = 0;
103         }
104     }
105     EightQueen(0, 8, chess);
106 
107     printf("共有%d方案",count);
108     fprintf(fp,"共有%d方案",count);
109     fclose(fp);
110 
111 
112     return  0;
113 }

 

posted @ 2015-03-19 00:19  疾风剑  阅读(126)  评论(0编辑  收藏  举报