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

时间:2021-05-27 14:00:36

标签: c++ algorithm data-structures

请谁能指出我做错了什么,这是排列代码,它存储小向量“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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我们必须从 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, 0, n - 1);
    
    for (int j = 0; j < ans.size(); j++){
        for (int k = 0 ; k < vec.size(); k++){
            cout<< ans[j][k];
        }
        cout << endl;
    }
}