/**/ /*N后问题*/ #include < stdio.h > #include < math.h > #define MAX 101 int total = 0 ; char m[MAX][MAX]; int is_ok( int s, int i, int * a) ... { int j ; for(j=1 ; j< s ; j++) if( (abs(i-a[j]) == abs(s-j)) || (i == a[j])) /**//*按行填入,所以只要检查列和斜列是否有皇后即可*/ return 0 ; return 1 ;} void nfind( int s, int n, int * a) ... { int i,p,q; if( s > n) ...{ total ++ ; printf("========The num of %d is ========== ",total); for(p=1 ; p<= n ; p++) ...{ for(q=1; q<=n ; q++) printf("%c ",m[p][q]); printf(" "); } } else ...{ for(i=1 ;i<= n; i++) if(is_ok(s,i,a)) ...{ a[s]=i ; m[s][i]='O' ; nfind(s+1,n,a); m[s][i]='*' ; } }} int main( void ) ... { int n ,a[MAX]=...{0}; scanf("%d",&n); memset(m,'*',sizeof(m)); nfind(1,n,a); printf(" total=%d ",total); system("pause"); return 0;}