USTC机试——八皇后问题,输入棋盘的宽度,输出可能解的个数


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 100
int queen[N]={0};
int sum=0;
int max;//保存从文件中读入的棋盘宽度
FILE *fp1,*fp2;
bool place(int n){//此函数用来判断当前行是否可以放置皇后
 for(int i=0;i<n;i++){
    if(queen[i]==queen[n]||abs(n-i)==abs(queen[i]-queen[n]))
       return false;
 }
 return true;
}
void NQueen(int n){//n皇后回溯问题
     int i;
  for(i=0;i<max;i++){
     queen[n]=i;
  if(place(n)){
     if(n==max-1)sum++;//如果到结尾,则解的个数加一
     else NQueen(n+1);//如果可以放置,且没到结尾则向下循环
  }
  }
}
int main(){
 fp1=fopen("5.in","r");
 fp2=fopen("5.out","w");
 fscanf(fp1,"%d",&max);
    NQueen(0);
 fprintf(fp2,"%d",sum);
return 0;
}
全部评论

相关推荐

最近拿到了正浩的提前批offer感觉自己的实力得到了肯定,也给了我更多底气
搞机墨镜猫:正浩提前批官网好像就只有电力电子软硬件,哥们投的是这两个岗位吗
26届校招投递进展
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务