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);
}
#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;
}