dfs做法:
#include<iostream>
using namespace std;
int n;
bool vis[10];
int f[10];
void dfs(int k){
if(k > n) {
for(int i : f) if(i)cout << i << " ";
cout << endl;
}
else{
for(int i = 1; i <= n; i++){
if(!vis[i]){
vis[i] = true;
f[k] = i;
dfs(k + 1);
vis[i] = false;
}
}
}
}
int main(){
cin >> n;
dfs(1);
return 0;
}
全排列算法:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n;
cin >> n;
vector<int>nums;
for(int i = 1; i <= n; i++) nums.push_back(i);
vector<vector<int> >res;
do{
res.push_back(nums);
}while(next_permutation(nums.begin(),nums.end()));
for(vector<vector<int> >::iterator it = res.begin(); it != res.end(); it ++){
vector<int> tmp;
tmp = *it;
for(vector<int>::iterator itt = tmp.begin(); itt != tmp.end(); itt ++){
cout << *itt << " ";
}
cout << endl;
}
return 0;
}