DFS(深度优先搜索)
深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。(直到走不下去才往回走) 基本模板 1 int check(参数) 2 { 3 if(满足条件) 4 return 1; 5 return 0; 6 } 7 8 void dfs(int step) 9 { 10 判断边界 11 { 12 相应操作 13 } 14 尝试每一种可能 15 { 16 满足check条件 17 标记 18 继续下一步dfs(step+1) 19 恢复初始状态(回溯的时候要用到) 20 } 21 } 实例 1、全排列(字符串内元素的所有排列方法)(洛谷CF6A与此题类似) 1 //全排列问题 2 #include<stdio.h> 3 #include<string.h> 4 5 int n; 6 char a[15]; 7 char re[15]; 8 int vis[15]; 9 //假设有n个字符要排列,把他们依次放到n个箱子中 10 //先要检查箱子是否为空,手中还有什么字符,把他们放进并标记。 11