#include<stdio.h>
#include<string.h>
int n;
int result[15]={0};
long int count=0;
void diag(int a,int step,int i,int map[][15]){
int j,k;
map[step][i] += a;
j = step;
k = i;
while (j!=0 && k!=0){
j -= 1;
k -= 1;
map[j][k] += a;
}
j = step;
k = i;
while (j!=(n-1) && k!=0){
j += 1;
k -= 1;
map[j][k] += a;
}
j = step;
k = i;
while (j!=(n-1) && k!=(n-1)){
j += 1;
k += 1;
map[j][k] += a;
}
j = step;
k = i;
while (j!=0 && k!=(n-1)){
j -= 1;
k += 1;
map[j][k] += a;
}
for (j=0;j<n;j++){
map[step][j] += a;
map[j][i] += a;
}
return;
}
void dfs(int step,int map[][15]){
int i;
if (step==n){
count += 1;
if (count <= 3){
for (i=0;i<n;i++){
printf("%d ",result[i]);
}
printf("\n");
}
return;
}
int j,k=0;
int flag = 0;
for (i=0;i<n;i++){
if (map[step][i]==0){
flag = 1;
diag(1,step,i,map);
result[step] = i+1;
dfs(step+1,map);
diag(-1,step,i,map);
result[step] = 0;
}
}
if (!flag){
return;
}
}
int main(){
int map[15][15]={0};
scanf("%d",&n);
dfs(0,map);
printf("%ld",count);
return 0;
}
最后一个点T了,求优化思路!谢谢各位