首页 新闻 会员 周边

请大家帮我看下我写的这个n皇后

0
悬赏园豆:10 [待解决问题]

你们看看我写的这个代码是不是已经剪枝了?
为什么统计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;
}

有什么不对的地方也帮忙指出下呀~~
哪能改进也指出来

javier_macro的主页 javier_macro | 初学一级 | 园豆:192
提问于:2019-01-25 20:39
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册