题目描述
给定一个整数n,将数字1∼n排成一排,将会有很多种排列方法。
现在,请你按照字典序将所有的排列方法输出。
感受
这道题抄的y总的,整理一下思路:
函数dfs中的三个参数分别表示,当前枚举的位置,所要输出的数组,当前的路径的状态,表示当前位置是否被用过,如果枚举的位置大于n,表示已经填完,可以输出,否则枚举下一个要填的位置
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 10;
int n;
void dfs(int u,int nums[],bool st[]){
if(u>n){
for(int i=1;i<=n;i++)printf("%d ",nums[i]);
printf("\n");
}else{
for(int i=1;i<=n;i++){
if(!st[i]){
st[i]=true;
nums[u]=i;
dfs(u+1,nums,st);
st[i]=false;
}
}
}
}
int main()
{
int nums[N];
bool st[N]={0};
scanf("%d",&n);
dfs(1,nums,st);
return 0;
}