请任何人解释一下为什么这个置换码不起作用



请有人指出我做错了什么吗?这是用于排列的代码,它存储了小向量"的所有可能的排列;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, 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;
}
}

相关内容

最新更新