1 8 5 0递归深搜~纠结了我好久~~~AC-code:#include<cstdio> #include<cstring> int ans,map[15],visit[15],n; void dfs(int k) { int i,j,flag; if(k==n+1) { ans++; return; } for(i=1;i<=n;i++) if(!visit[i]) { map[k]=i; flag=1; for(j=1;j<k;j++) if(map[k]-map[j]==k-j||map[k]-map[j]==j-k) { flag=0; break; } if(flag) { visit[i]=1; dfs(k+1); visit[i]=0; } } } int main() { int i,num[15]; for(n=1;n<=10;n++) { ans=0; memset(map,0,sizeof(map)); memset(visit,0,sizeof(visit)); dfs(1); num[n]=ans; } while(scanf("%d",&n),n) printf("%d\n",num[n]); return 0; }
1 92 10
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lin14543/article/details/47273479