全排列
全排列在前期好多题中都能水个暴力分
题目描述
把 1~n 这 n(n<10) 个整数排成一行后随机打乱顺序,输出所有可能的次序。
输入和输出
Input
一个整数n。
Output
按照从小到大的顺序输出所有方案,每行1个。 首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。
#include <bits/stdc++.h>
using namespace std;
int n,a[20];
bool flag[20];
void dfs(int x)
{
if(x==n+1)
{
printf("%d",a[1]);
for(int i=2;i<=n;i++)
printf(" %d",a[i]);
cout<<'\n';
return;
}
for(int i=1;i<=n;i++)
{
if(!flag[i])
{
flag[i]=1;
a[x]=i;
dfs(x+1);
flag[i]=0;
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}