【例题2-4】排列问题
输入n个数字,输出它的所有排列
【题解】
总体的思路就是先产生一个数字的排列 ①->从后面n-1个数字中挑一个数字到第一个位置上替换它(n-1)个方案. ②生成后面n-1数字的排列。 一直重复这个两个步骤就可以了 (感觉是比之前那种flag[]数组法好用的方法)【代码】
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10;
int n;
int a[N+10];
int cnt = 0;
void dfs(int k,int m){
if (k==m+1){
cout<<++cnt<<":";
for (int i = 1;i <= m;i++){
cout<<a[i]<<' ';
}
cout<<endl;
return;
}
for (int i = k;i <= m;i++){
swap(a[k],a[i]);
dfs(k+1,m);
swap(a[k],a[i]);
}
}
int main(){
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
dfs(1,n);
return 0;
}