织芜 2023-05-11 23:28 采纳率: 72%
浏览 14
已结题

C++n皇后算法出现问题

不知怎么的,这段程序运行后什么都不输出


#include<iostream>
#include<vector>
using namespace std;

void recurse(vector<vector<bool>> queens,vector<vector<bool>> trail,int n,int k){
    if(k>n){
        for(vector<vector<bool>>::iterator it=queens.begin();it!=queens.end();it++){
            for(vector<bool>::iterator it2=it->begin();it2!=it->end();it++){
                if(*it2){
                    cout<<"Q";
                }else{
                    cout<<"*";
                }
            }
            cout<<endl;
        }
        return;
    }

    int direct_x[8]={1,1,1,0,0,-1,-1,-1};
    int direct_y[8]={1,0,-1,1,-1,1,0,-1};

    vector<vector<bool>> Qtmp=queens;
    vector<vector<bool>> Ttmp=trail;

    for(int i=0;i<n;i++){
        queens[k][i]=true;
        for(int j=0;j<8;j++){
            trail[k+direct_y[j]][i+direct_x[j]]=true;
        }
        if(!trail[k][i]){
            recurse(queens,trail,n,k+1);
        }
        queens=Qtmp;
        trail=Ttmp;
    }
}

void Nqueens(int n){
    vector<vector<bool>> trail;
    vector<vector<bool>> queens;

    for(vector<vector<bool>>::iterator it=queens.begin();it!=queens.end();it++){
        for(vector<bool>::iterator it2=it->begin();it2!=it->end();it++){
            *it2=0;
        }
    }

    for(vector<vector<bool>>::iterator it=trail.begin();it!=trail.end();it++){
        for(vector<bool>::iterator it2=it->begin();it2!=it->end();it++){
            *it2=0;
        }
    }

    recurse(queens,trail,n,1);
}

int main(){
    int n;
    cin>>n;
    Nqueens(n);
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2023-05-11 23:55
    关注
    #include<iostream>
    #include<vector>
    using namespace std;
    
    void recurse(vector<vector<bool>> queens, vector<vector<bool>> trail, int n, int k) {
        if(k == n) {
            for(vector<vector<bool>>::iterator it=queens.begin(); it!=queens.end(); it++) {
                for(vector<bool>::iterator it2=it->begin(); it2!=it->end(); it2++) {
                    if(*it2) {
                        cout<<"Q";
                    } else {
                        cout<<"*";
                    }
                }
                cout<<endl;
            }
            return;
        }
    
        int direct_x[8] = {1, 1, 1, 0, 0, -1, -1, -1};
        int direct_y[8] = {1, 0, -1, 1, -1, 1, 0, -1};
    
        for(int i=0; i<n; i++) {
            if(!trail[k][i]) {
                vector<vector<bool>> Qtmp = queens;
                vector<vector<bool>> Ttmp = trail;
                queens[k][i] = true;
                for(int j=0; j<8; j++) {
                    int y = k + direct_y[j];
                    int x = i + direct_x[j];
                    if(y >= 0 && y < n && x >= 0 && x < n) {
                        trail[y][x] = true;
                    }
                }
                recurse(queens, trail, n, k+1);
                queens = Qtmp;
                trail = Ttmp;
            }
        }
    }
    
    void Nqueens(int n) {
        vector<vector<bool>> queens(n, vector<bool>(n, false));
        vector<vector<bool>> trail(n, vector<bool>(n, false));
        recurse(queens, trail, n, 0);
    }
    
    int main() {
        int n;
        cin>>n;
        Nqueens(n);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月11日

悬赏问题

  • ¥15 python深度学习代码求跑
  • ¥100 对接美团闪购医药接口相关问题
  • ¥15 嵌入式软件电子烟开发
  • ¥15 职场 Excel 查重问题
  • ¥15 求怎么用idea2021.3.2创建web项目并配置tomcat
  • ¥100 or-tools的相关问题
  • ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot
  • ¥15 VAE模型编程报错无法解决