微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

请谁能解释一下为什么这个排列代码不起作用

如何解决请谁能解释一下为什么这个排列代码不起作用

请谁能指出我做错了什么,这是排列代码,它存储小向量“vec”的所有可能排列,然后显示

#include<vector>
using namespace std;
vector <vector<int>> ans;

void permut(vector<int> &vec,int index){
if(index==vec.size()){
    ans.push_back(vec);
    return;
}
for (int i = index ;i<index;i++){
    swap(vec[i],vec[i+1]);
    permut(vec,index+1);
    swap(vec[i],vec[vec.size()]);
}

}

int main(){
    int n; cin>>n; 
    vector<int> vec(n);
    for(int i = 1;i<=n; i ++){
        vec[i-1]= i;
    }

    permut(vec,0);
    for (int j =0 ;j<ans.size();j++){
        for(int k = 0 ; k<vec.size();k++){
            cout<< vec[j]<<endl;
        }
    }
}

解决方法

我们必须从 i = starti = end 运行 for 循环,但您是从 i = indexi < index 运行它,这意味着您的循环甚至不会运行一个时间。

#include<bits/stdc++.h>
using namespace std;

vector <vector<int> > ans;

void permut (vector <int> &vec,int start,int end){
    // base case
    if (start == end){
        ans.push_back(vec);
    } else {
        for (int i = start; i <= end; i++){
            swap(vec[i],vec[start]);
            permut(vec,start + 1,end);
            swap(vec[i],vec[start]); //backtrack
        }
    }
    
}

int main() {
    int n; 
    cin >> n; 
    vector <int> vec(n);
    for (int i = 0;i < n; i++) {
        vec[i]= i + 1;
    }

    permut(vec,n - 1);
    
    for (int j = 0; j < ans.size(); j++){
        for (int k = 0 ; k < vec.size(); k++){
            cout<< ans[j][k];
        }
        cout << endl;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。