全排列问题(STL)
题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
每个数字保留5个常宽。
数据规模
1<=N<=9
思路
今天只是想借这个水题讲讲STL库里面的next_permutation()函数,话说STL是真好用,具体实现看代码吧。注意库是< algorithm >。
应用就是枚举全排列,函数作用就是修改数组返回到下一个全排列。
代码
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
long long i,j,m,n,k,ans,a[200001],c[200001],d[200001];
long long x[200001],y[200001],sy[200001];
long long last[200001];
int r()
{
int ans=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
ans*=10;
ans+=ch-'0';
ch=getchar();
}
return ans*f;
}
int main()
{
n=r();
for(i=1;i<=n;i++)
a[i]=i,printf("%5d",a[i]);
cout<<endl;
while(next_permutation(a+1,a+n+1))
{
for(i=1;i<=n;i++)
printf("%5d",a[i]);
cout<<endl;
}
return 0;
}