洛谷 全排列问题
题目描述
按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
一个整数 n。
输出格式
由 1∼n 组成的所有不重复的数字序列,每行一个序列。
每个数字保留 5 个场宽。
输入输出样例
输入 #1复制
3
输出 #1复制
1 2 31 3 22 1 32 3 13 1 23 2 1
类似于前两个问题,不过这道题没有顺序性。
代码:
#include <bits/stdc++.h>
#define MX 5000005
using namespace std;
int n;
int cnt = 0,a[MX],ant = 0,b[MX];
void dfs(int ant)
{
if(ant == n){
for(int i = 1;i <= n;i++)
{
cout<<setw(5)<<b[i];
}
cout<<endl;
return;
}
for(int j = 1;j <= n;j++)
{
if(a[j] == 0)
{
a[j] = 1;
b[ant+1] = j;
dfs(ant+1);
a[j] = 0;
}
}
}
int main() {
cin>>n;
a[0] = 0;
dfs(0);
return 0;
}