理解什么是全排列?
我们一般把1~n这n个整数按某个顺序摆放的结果称为这n个整数的一个排列,而全排列指这n个整数能形成的所有排列
例如对1、2、3这三个整数来说
它的全排列是:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
三个整数的全排列用手很快就能无差错的列举出来,那当是10个、100个时呢?
下面我们用程序来实现全排列
方法一:递归
#include <bits/stdc++.h>
using namespace std;
int n;
int res[10001], vis[10001];
void dfs(int step){
if(step == n+1){
for(int i = 1; i <= n; i++){
cout<<res[i]<<' ';
}
cout<<endl;
return;
}
for(int i = 1; i <= n; i++){
if(!vis[i]){
vis[i] = 1;
res[step] = i;
dfs(step+1);
vis[i] = 0;
}
}
}
int main(){
cin>>n;
memset(res, 0, sizeof(res));
memset(vis, 0, sizeof(vis));
dfs(1);
return 0;
}
方法二:借助C++ STL全排列函数
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int s[10001];
for(int i = 0; i < n; i++){
s[i] = i+1;
}
do{
for(int i = 0; i < n; i++){
cout<<s[i]<<' ';
}
cout<<endl;
}while(next_permutation(s, s+n));
return 0;
}