Description
给你一个数,输出所有的排列
Input
一个数n
Output
看样例
Sample Input
2
Sample Output
1 2
2 1
HINT
按升序排列的全排列问题
AC代码:
1.用dfs来做。
#include<bits/stdc++.h>
using namespace std;
int a[15],b[15],n;
void dfs(int x)
{
int i;
if(x==n+1)
{
printf("%d",a[1]);
for(i=2;i<=n;i++)
printf(" %d",a[i]);
printf("\n");
return;
}
for(i=1;i<=n;i++)
{
if(!b[i])
{
a[x]=i;
b[i]=1;
dfs(x+1);
b[i]=0;
}
}
return;
}
int main()
{
while(~scanf("%d",&n))
dfs(1);
return 0;
}
2.使用C++ algorithm文件中的next_permutation:对于当前的排列,如果在字典序中还存在下一个排列,返回真,并且把当前排列调整为下一个排列;如果不存在,就把当前排列调整为字典序中的第一个排列(即递增排列),返回假。
#include<iostream>
#include<algorithm>
using namespace std;
void FullPermutation(int a[],int n)
{do
{
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}while(next_permutation(a,a+n));
}
int main()
{int n,i;
int a[1000];
cin>>n;
for(i=0;i<n;i++) a[i]=i+1;
FullPermutation(a,n);
return 0;
}