由数据范围反推算法复杂度以及算法内容 - 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
#include<iostream> using 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题库