![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<stdlib.h> const int N=20; int q[N]; int cont=0; void print(int n) { cont++; int i; printf("NO.%d:",cont); for(i=1;i<=n;i++) printf("%d",q[i]); printf("\n"); } int find(int i,int k) { int j; j=1; while(j<k) { if((q[j]==i)||(abs(q[j]-i)==abs(j-k))) return 0; j++; } return 1; } void place(int k,int n) { if(k>n) print(n); else for(int i=1;i<=n;i++) if(find(i,k)) { q[k]=i; place(k+1,n); } } void disp(int zz,int n) { int i,j,q=0,k[N]; for(j=0;j<n;j++) for(i=0;i<n;i++) if(zz[i][j]) k[q]=zz[i][j]; printf("zzhou:%s",k); } void zb(int a[],int n) { int i=0,j=0,zz[N][N],s=0; for(;s<n;s++) for(;i<n;i++) for(;j<n;j++) if(i==s||j==a[s]) zz[i][j]=1; else zz[i][j]=0; disp(zz,n); } void main() { int n; printf("huanghouwenti(n<20)n="); scanf("%d",&n); if(n>20) printf("n is too big to do!\n"); else { printf("%d quuen matter's jieguo:\n",n); place(1,n); printf("\n"); } zb(q[],n); }