AcWing 94. 递归实现排列型枚举
原题链接
简单
作者:
尼古拉斯小布丁
,
2021-03-18 16:57:10
,
所有人可见
,
阅读 317
1、使用STL库的next_permutation()函数
2、平时用的这个函数比较少,就得用之前还要查一查
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 15;
int arr[N];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++) arr[i] = i;
do{
for(int i=1;i<=n;i++)
cout<<arr[i]<<" ";
cout<<"\n";
}while(next_permutation(arr+1, arr+n+1));
}
dfs写法,先枚举每个位置,再枚举每个位置上能填哪些数
#include <iostream>
using namespace std;
const int N = 15;
int state[N]; //0表示没有放过,1~n表示放了是哪个数
bool used[N]; //true表示该数使用过,false表示没有使用过
int n;
void dfs(int u){ //u表示当前是枚举数的位置
if(u > n){
for(int i=1;i<=n;i++){
if(state[i]!=0)
cout<<state[i]<<" ";
}
cout<<"\n";
}
for(int i=1;i<=n;i++) //枚举各个数,放到u这个位置上
{
if(!used[i]){ //当这个数没有用过时
state[u] = i;
used[i] = true;
dfs(u+1);
state[u] = 0; //恢复现场
used[i] = false;
}
}
}
int main(){
cin>>n;
dfs(1);
return 0;
}
兄弟你没有填邀请码可以填一个,都可以得AC币!嘿嘿,谢谢兄弟
我的邀请码是:GUDFH