#include <stdio.h> #define LEN 16 int count=0; int isCorrect(int i, int j, int (*Q)[LEN]) { int s, t; for(s=i,t=0; t<LEN; t++) { if(Q[s][t]==1&&t!=j) return 0; } for(t=j,s=0; s<LEN; s++) { if(Q[s][t]==1&&s!=i) return 0; } for(s=i-1,t=j-1;s>=0&&t>=0;s--,t--) { if(Q[s][t]==1) return 0; } for(s=i+1,t=j+1;s<LEN&&t<LEN;s++,t++) { if(Q[s][t]==1) return 0; } for(s=i-1,t=j+1;s>=0&&t<LEN;s++,t++) { if(Q[s][t]==1) return 0; } for(s=i+1,t=j-1;s<LEN&&t>=0;s++,t--) { if(Q[s][t]==1) return 0; } return 1; } void Queen(int j, int (*Q)[LEN]) { int i,k; if(j==LEN) { for(i=0;i<LEN;i++) { for(k=0;k<LEN;k++) printf("%d ", Q[i][k]); printf("\n"); } printf("\n"); count++; return; } for(i=0;i<LEN;i++) { if(isCorrect(i, j, Q)) { Q[i][j]=1; Queen(j+1, Q); Q[i][j]=0; } } } int main(void) { int Q[LEN][LEN]; int i,j; for(i=0;i<LEN;i++) for(j=0;j<LEN;j++) Q[i][j]=0; Queen(0,Q); printf("The number of the answers of .. are %d \n", count); }