法1.直接使用next_permutation
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[10];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)a[i]=i,printf("%d ",i); //注意要输出原排列
while(next_permutation(a+1,a+1+n)) //全排列(除了原排列)
{
printf("\n");
for(int i=1;i<=n;i++)printf("%d ",a[i]);
}
}
法2.手动DFS遍历
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,a[10],st[10];
void dfs_(int num)
{
if(num==n+1)
{
for(int i=1;i<=n;i++) printf("%d ",a[i]);
printf("\n");
return;
}
for(int i=1;i<=n;i++)
{
if(!st[i])
{
st[i]=1;
a[num]=i;
dfs_(num+1);
st[i]=0;
}
}
}
int main()
{
cin>>n;
dfs_(1);
return 0;
}