C++的STL有一个函数可以方便地生成全排列,这就是next_permutation,next_permutation函数的返回值类型是bool型。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,p[10];
cin>>n;
for(int i(0);i<n;i++)
cin>>p[i];
sort(p,p+n);
do
{
for(int i(0);i<n;i++)
cout<<p[i]<<" ";
cout<<endl;
}while(next_permutation(p,p+n));<span style="white-space:pre"> </span>//如果在字典序中比该序列大的下一个序列存在则返回真
return 0;
}
输入:
3
3 2 1
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
该函数同时还可以对字符串进行字典序全排序,与该函数相反的函数是prev_permutation。
#include<iostream>
#include<algorithm>
using namespace std;
int compare(int a,int b)
{
return a>b;
}
int main()
{
int n,p[10];
cin>>n;
for(int i(0);i<n;i++)
cin>>p[i];
sort(p,p+n,compare);
do
{
for(int i(0);i<n;i++)
cout<<p[i]<<" ";
cout<<endl;
}while(prev_permutation(p,p+n));
return 0;
}
输入:
3
1 2 3
输出:
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3