深度优先算法DFS(depth first search)
1.适用对象:树 、图。
2遍历方式:
①选择某结点作为此次遍历的起始结点,选择一条支路深入遍历,
②如果按照某条支路遍历遇到“边界结点”(即没有孩子结点的结点)时,无法在深入向下,则回溯到此“边界节点”的“父节点”,然后找这个“父节点”的另一个子节点,继续深入遍历。
③再次遇到“边界结点”时,重复执行②步骤。
3.具体实例(以树型结构举例):
4.实现方式(DFS算法实现可用栈来实现)。
原理:DFS的关键是回溯、深入遍历。正好利用栈后进先出的特点实现DFS的回溯操作。
方法:
1步骤:选定一个顶点作为起始点,标记为已访问且放入stack,当作新的栈顶。
2步骤:分两种情况:
①如果刚放入stack的栈顶结点在图中存在未被访问的结点,则选择它的一个邻接点,标记为已访问,放入stack.(一个顶点的邻接点不止一个时,可以设定某规则,比如选择相邻结点中的一个小数)。
②如果刚放入stack的栈顶结点在图中的所有邻接结点全被访问过,则将它弹出stack,stack则产生新的栈顶,重复执行2.步骤。(体现了DFS的回溯操作)