$$\color{red}{算法}\color{blue}{基础课}\color{purple}{笔记and题解}\color{green}{汇总}$$
笔记:
$DFS$(深度优先搜索)是沿源点持续向下遍历,直到无法拓展当前状态,返回上一层(回溯),再找到其他状态继续向下遍历。
根据y总形容:这是一个执着的小盆友。
$DFS$一定对应一棵搜索树。
搜索的顺序构成一棵树,也就是搜索树。
对于这题,我们设定状态为已经设定好的排列。
每次尝试对排列拓展,尝试可以放入的数。
直到全部放入$ans$数组,输出答案并回溯。
代码:
#include <bits/stdc++.h>
using namespace std;
int n, a[10];
bool f[10];
void dfs(int h) {
if (h == n + 1) {
for (int i = 1; i <= n; i++) printf("%d ", a[i]);
puts(""); return;
}
for (int i = 1; i <= n; i++)
if (!f[i]) a[h] = i, f[i] = 1, dfs(h + 1), f[i] = 0;
}
int main() {
scanf("%d", &n);
dfs(1);
return 0;
}
???你做这么水的题肝肾么
俺也不知道,哈哈哈哈
《根据y总形容:这是一个执着的小盆友。》
y总直播评论:执着为啥要用绿色?
y总:好问题