AcWing 94. 递归实现排列型枚举
原题链接
简单
作者:
英特耐雄纳尔
,
2021-03-15 10:46:34
,
所有人可见
,
阅读 326
next_permutation 快速版
#include<bits/stdc++.h>
using namespace std;
const int N = 10;
int n;
int a[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++) a[i]=i+1;
do{
for(int j=0;j<n;j++) cout<<a[j]<<' ';
puts("");
}while(next_permutation(a,a+n));
return 0;
}
递归解法
#include<bits/stdc++.h>
using namespace std;
int n;
int st[10]; //表示1-n这n个位置的状态,0表示没用过,1-n表示它们的值
bool used[10]; //表示以索引的值是否用过
void dfs(int u)
{
if(u>n) //到达第n+1个位置,递归找到结束点
{
for(int i=1;i<=n;i++) cout<<st[i]<<' ';
puts("");
return;
}
for(int i=1;i<=n;i++)
{
if(!used[i])
{
st[u]=i; //u这个位置选择了i这个数
used[i]=true; //i这个数已经使用过了
dfs(u+1);
//恢复现场
used[i]=false;
st[u]=0;
}
}
}
int main()
{
cin>>n;
dfs(1);
return 0;
}