next-permutation用于全排列,比dfs不知道高到哪里去了~(+1s)
1.基本框架
int a[];
do
{
}while(next_permutation(a+1,a+n+1));
2.代码
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[10];
int n;
int tot=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1);//注意:为什么要sort?加入输入3 2 1,不排序的话只能输出3 2 1。而排序后能输出6种。
do
{
for(int i=1;i<=n;i++)
{
cout<<a[i];
}
tot++;
cout<<endl;
}while(next_permutation(a+1,a+n+1));//**要在循环前先输出一遍!!!否则不会输出最小的排列!!**
cout<<tot;
return 0;
}
3.prev_permutation
从大到小的全排列,当然sort要加一个自定义函数。代码如下
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int cmp(int x,int y)
{
return x>y;
}
int main()
{
int a[10];
int n;
int tot=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
do
{
for(int i=1;i<=n;i++)
{
cout<<a[i];
}
tot++;
cout<<endl;
}while(prev_permutation(a+1,a+n+1));
cout<<tot;
return 0;
}
///
任何一个伟大的目标,都有一个微不足道的开始。——洛谷 试炼场