昨晚回寝,看小林子在整N后,N后是怎么写来着,哥再写一个玩玩。 //#include <iostream> #include <stdio.h> #include <stdlib.h> #include <memory.h> const int N=16; int M[N][N]; int fun1(int *M) { printf("------------------------------------/n"); for(int i=0;i<N;++i) { for(int j=0;j<N;++j) { printf("%d ",*(M+N*i+j)); } printf("/n"); } } int fun2(int (*M)[N]) { for(int i=0;i<N;++i) { for(int j=0;j<N;++j) { printf("%d ",M[i][j]); } printf("/n"); } } bool fun4(int *M,int i,int j) { for(int k=0;k<=i;++k) { if(*(M+N*k+j)==1) { return false; } if(j-k>=0) { if(*(M+N*(i-k)+(j-k))==1) return false; } if(j+k<N) { if(*(M+N*(i-k)+(j+k))==1) return false; } } return true; } int fun3(int *M,int i,int *cnt) { int j=0; //int i=0; //int cnt=0; if(i==N) { //fun1(M); //system("pause"); *cnt=*cnt+1; return 0; } while(j<N) { if(fun4(M,i,j)) { *(M+N*i+j)=1; fun3(M,i+1,cnt); } // *(M+N*i+j)=0; j++; } } int main() { //fun1(&M[0][0]); memset(&M[0][0],sizeof(int)*N*N,0); int cnt=0; fun3(&M[0][0],0,&cnt); printf("%d",cnt); system("pause"); }