你们看看我写的这个代码是不是已经剪枝了?
为什么统计15皇后的时候一直出不来答案
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
int n;
vector<int> record;
int count=0;
void Nqueen_back_trace(int level){
if(level == n+1){
/*输出序列
for(int i=0;i<record.size();i++){
printf("%d ",record[i]);
}
printf("\n");
*/
count++;
return;
}
for(int i=1;i<=n;i++){ // i is col
int flag = 0;
for(int j=0;j+1<level;j++){ //j+1 is row
double k = abs(i - record[j])*1.0/(level-(j+1)); //由斜率判断是否为对角或上下方
if(k == 1.0 || k == -1.0 || k == 0){
flag = 1;
}
}
if(!flag){
record.push_back(i);
Nqueen_back_trace(level+1);
record.pop_back();
}
}
}
int main(){
scanf("%d",&n);
Nqueen_back_trace(1);
printf("%d",count);
return 0;
}
有什么不对的地方也帮忙指出下呀~~
哪能改进也指出来