作者:殇心Long | 来源:互联网 | 2023-08-14 12:43
#include
#include
#define max 10
int map[max][max];
int palce[max];
int ans[max];
/*
表示这一行的皇后放在哪一列
*/
int num;
int check(int t,int x,int n){int i,j,k;int flag=1;for(i=0;i=0)&&(x-k)>=0;k++){if(map[t-k][x-k]==1){flag=0;return flag;}}/*对角线有两边*/for(k=0;(t-k>=0)&&(x+k)return flag;
}
void dfs(int t,int n){/*n表示总共有多少个皇后*/int tempx,tempy;if(t&#61;&#61;n){num&#43;&#43;;/*for(int i&#61;0;iint main(){int n;/*n&#61;5;map[1][2]&#61;1;int a&#61;check(2,1,n);printf("%d\n",a);*//*这个题目会超时所以先把所有的结果保存起来比较好while(scanf("%d",&n)!&#61;EOF){if(n&#61;&#61;0)break;num&#61;0;memset(map,0,sizeof(map));dfs(0,n);printf("%d\n",num);}*/for(int i&#61;1;i<&#61;10;i&#43;&#43;){num&#61;0;memset(map,0,sizeof(map));dfs(0,i);ans[i]&#61;num;}while(scanf("%d",&n)!&#61;EOF){if(n&#61;&#61;0)break;printf("%d\n",ans[n]);}return 0;
}