问题描述
请谁能指出我做错了什么,这是排列代码,它存储小向量“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 = start
到 i = end
运行 for 循环,但您是从 i = index
到 i < 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;
}
}