// 采用深度搜索的方式进行搜索,每次放置一个皇后是都得用check()函数进行判断,要是可以放下去,则皇后数目加一,继续进行深度搜索 
//这里采用的不是传统的二维数组,而是一位数组 queen[n] = i;其中n是行的数目,也是皇后的数目,i是列的数目 
//这题还有一个特点是测试的数据特别多,因此如果不将第一次获得的数据保存在数组中的话,下次则还要重新计算,绝对会超时 
// 31ms 152kb
#include <stdio.h>
#include
<stdlib.h>

int queen[11], sum=0;
int method[11]={0};
int m;
int check(int n){
int i;
for(i = 0; i < n; i++){
//列和对角线的检查
if(queen[i] == queen[n] || abs(queen[i] - queen[n]) == (n - i)){
return 1;
}
}
return 0;
}

void put(int n){
int i;
for(i = 0; i < m; i++){
queen[n]
= i;
if(!check(n)){
if(n == m - 1){
sum
++;
}
else{
put(n
+ 1);
}
}
}
}

int main(){
while(scanf("%d",&m),m!=0){
sum
=0;
if(method[m]!=0)
printf(
"%d\n",method[m]);
else{
put(
0);
method[m]
=sum;
printf(
"%d\n", sum);
}
}
return 0;
}

相关文章:

  • 2022-12-23
  • 2021-09-21
  • 2021-06-15
  • 2021-09-10
  • 2021-07-28
  • 2021-12-09
  • 2021-07-23
  • 2022-01-18
猜你喜欢
  • 2020-02-29
  • 2021-07-15
  • 2021-05-28
  • 2022-01-24
  • 2021-12-05
相关资源
相似解决方案