由数据范围反推算法复杂度以及算法内容 - AcWing
常用代码模板3——搜索与图论 - AcWing
基本思想:
深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。过程为沿着每一个可能的路径向下进行搜索,直到不能再深入为止,并且每一个节点只能访问一次。
比如下面这张图里,将123三个数全排列,我们第一次选择1,然后到2,最后3,得到123,此时走到底了开始回溯,到第二层还是只有3能选而且选过,就继续回溯到第一层,然后我们可以3,再选择2,此时为132,同样的进行回溯,直到第0层,我们第一个选择2,然后选择1,3得到213,此后的都是走得无路可走后回溯看是否有其他路径可以走,直到所有可能的方法都走过了dfs也就完成了。
第三章开始就感觉比较难了,加上期末复习,进度就放慢一点吧。

842. 排列数字 - AcWing题库
给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。
现在,请你按照字典序将所有的排列方法输出。
输入格式
共一行,包含一个整数 n。
输出格式
按字典序输出所有排列方案,每个方案占一行。
数据范围
1≤n≤7
输入样例:
3
输出样例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#includeusing namespace std;int n; int path[10], st[10];void dfs(int u) {if(u == n){for(int i = 0; i < n; i++) cout << path[i] << " ";cout << endl;return;}for(int i = 1; i <= n; i++){if(!st[i]){st[i] = true;path[u] = i;dfs(u + 1);st[i] = false;//恢复现场}} }int main() {cin >> n;dfs(0);return 0; }
例题:
843. n-皇后问题 - AcWing题库
846. 树的重心 - AcWing题库
1112. 迷宫 - AcWing题库