八皇后问题
1 /*N皇后问题*/ 2 #include<stdio.h> 3 #include<string.h> 4 int a[20][20];//N皇后矩阵 5 int v[3][20];//v[0][i]表示列是否冲突;v[1][i]表示副对角线是否冲突; v[2][i]表示正对角线是否冲突 6 int n;//N皇后 7 int c[1000][20];//存放条件成立的结果 8 int num; 9 10 11 void fun(int cur) 12 { 13 int i; 14 if(cur==n) 15 { 16 num++; 17 return ; 18 } 19 20 for(i=0;i<n;i++) 21 { 22 if(!v[0][i] &&!v[1][i+cur]&&!v[2][cur-i+n]) 23 { 24 c[num][cur]=i;//c[num][cur]存放的是num个结果中的 第cur行第i列是皇后 25 v[0][i] =v[1][i+cur]=v[2][cur-i+n]=1; 26 fun(cur+1); 27 v[0][i] =v[1][i+cur]=v[2][cur-i+n]=0; 28 } 29 } 30 } 31 32 void pint() 33 { 34 int i,a,b; 35 FILE *p; 36 p=fopen("八皇后.txt","w"); 37 for(i=0;i<num;i++) 38 { 39 fprintf(p,"%d\n",i+1); 40 for(a=0;a<n;a++) 41 { 42 for(b=0;b<n;b++) 43 if(c[i][a]==b)//c[num][cur]存放的是num个结果中的 第cur行第i列是皇后 44 //printf("1 "); 45 fprintf(p,"1 "); 46 else 47 // printf("0 "); 48 fprintf(p,"0 "); 49 fprintf(p,"\n"); 50 } 51 fprintf(p,"\n"); 52 } 53 fclose(p); 54 } 55 56 int main() 57 { 58 while(scanf("%d",&n)) 59 { 60 memset(a,0,sizeof(a)); 61 memset(v,0,sizeof(v)); 62 memset(c,0,sizeof(c)); 63 num=0; 64 fun(0); 65 printf("%d\n",num); 66 pint(); 67 } 68 return 0; 69 } 70 71 72 73