深度优先搜索算法(英语:Depth-First-Search,简称DFS)是一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。 ——————————————————————————————————————————————————————
访问过程: 每一个节点入栈,当无下一个节点访问时出栈。用一个vis【】数组记录那些节点已经访问过。
从根节点1开始访问,1节点入栈。
从1节点出发访问它能够访问的点,访问到2节点,2节点入栈。
从2节点出发继续往下访问。2访问3节点,3节点入栈。又从3出发,3访问4, 4访问5。
最后5节点没有访问的点,进行出栈。
然后回溯到4节点, 继续从4节点出发直到遍历完全部节点。
最后节点全部出栈,完成DFS。基本模板:
int check(参数) { if(满足条件) return 1; return 0; } void dfs(int step) { 判断边界 { 相应操作 } 尝试每一种可能 { 满足check条件 标记 继续下一步dfs(step+1) 恢复初始状态(回溯的时候要用到) } }