函数名为next_permutation(A,B),参数A,B给出要进行全排列的数组区间,
注意要先给数组赋值 ,且此函数不会产生相同的排列(若数组元素为1 1 2,不会产生两个112,即不区分连个相同数的次序)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int a[3] = {2,3,1};
sort(a,a+3);
do {
for(int i=0;i<3;i++)
cout << a[i] << " ";
cout << endl;
}while(next_permutation(a,a+3));
}
另 dfs手写版本:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a[101];
bool book[101];
void dfs(int step,int n)
{
if(step == n+1 ) {
for(int i=1;i<=n;i++)
cout << a[i] << " ";
cout << endl;
return;
}
for(int i=1;i<=n;i++) {
if(book[i] == 0) {
a[step] = i;
book[i] = 1;
dfs(step+1,n);
book[i] = 0;
}
}
}
int main()
{
int n;
cin >> n;
dfs(1,n);
}