深度优先搜索算法
深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点,可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。
我们可以看到,这样的访问策略是优先往纵向挖掘深入,而不是对一个结点的所有邻接结点进行横向访问。
显然,深度优先搜索是一个递归的过程。
算法分析:
假设起始节点为1;先搜索1节点的右侧邻接节点为2,此时将1节点置为已搜索状态;判断2节点是否为已搜索状态,若未搜索,则将2节点置为已搜索状态;每次都优先搜索判断右侧邻接节点;
如图所示,若此时已搜索至5节点,发现右侧邻接节点为2且已处于已搜索状态;故递归至上一个节点8搜索左侧邻接节点处...层层递归判断至1节点(在图中没有并表明递归路径);
此时搜索判断1节点的左侧邻接节点3不为已搜索状态,故继续进行先右侧后左侧邻接节点搜索判断操作;
直至最后一个节点6搜索判断3节点为已搜索状态,故递归至最初的1节点;判断结束,搜索结束。
代码实现:
// 对dfs进行一个重载,遍历我们所有的结点,并进行dfs