递归

92. 递归实现指数型枚举 - AcWing题库

image-20240221101137855

每个位置 选或不选 不选的话就直接dfs(u + 1)过去 选的话 就标记一下vis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;
int a[20];
int vis[20];
int n;

void dfs(int u)
{
// 边界 枚举到最后一个
if (u > n)
{
for (int i = 1; i <= n; i++)
{
if (vis[i])
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
if (!vis[u])
{
vis[u] = true;
dfs(u + 1); // 当前位置选
vis[u] = false;
dfs(u + 1);// 当前位置不选
}
}

int main()
{
cin>>n;
for (int i = 1; i <= n; i++)a[i] = i;
dfs(1);
}

94. 递归实现排列型枚举 - AcWing题库

image-20240221112328817

每个位置都需要填东西 关键是填什么

那就是 每个位置选一个填 选过的就标记 下次从没标记的里面选

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
int nums[10];
bool used[10];
int n;
void dfs(int u)
{
if (u > n)
{
for (int i = 1; i <= n; i++)
cout<<nums[i]<<" ";
puts("");
return ;
}

for (int i = 1; i <= n; i++)
{
if (!used[i])
{
used[i] = true;
nums[u] = i;
dfs(u + 1);
//
used[i] = false;
}
}
}

int main()
{
cin>>n;
dfs(1);
}

递归
https://brtulien.github.io/2024/02/21/递归/
作者
Brtulien
发布于
2024年2月21日
更新于
2024年7月1日
许可协议