http://bailian.openjudge.cn/practice/2754/
题意:虽然是汉语,但是也要好好读题。
思路:别人的思路总是轻描淡写,但是我表示很难理解。
这道题想了很久,只能说现在稍微了解。
1: 用递归去把92中排列方式以从小到大方式计算出。那么每一次都要从小开始寻找。
而很好的是,写递归可以从小开始找,即使某一种不合适八皇后共存也会回溯重新找。
2:对于判断某一个皇后的上下左右、斜边 这个方法很巧妙,用绝对值。
#include<cstdio>
#include<cstdlib>
#include<cstring>
int ans[100][10];
int temp[10];
int num = 1;
void find_it(int i)
{
int j,k;
if(i == 9){
for(j = 1;j <= 8; j++)
ans[num][j] = temp[j];
num++;
return ;
}
for(j = 1;j <= 8; j++){
for(k = 1;k < i; k++)
if(temp[k] == j || abs(k - i) == abs(temp[k] - j))
break;
if(k == i){
temp[i] = j;
find_it(i+1);
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
find_it(1);
for(int i = 0;i < n; i++){
int t;
scanf("%d",&t);
for(int j = 1;j <= 8; j++)
printf("%d",ans[t][j]);
printf("\n");
}
return 0;
}