图遍历
图遍历是指,从图的某个顶点出发,沿着搜索路径,将图中所有顶点都访问一遍。图遍历是解决连通问题、拓扑排序问题、关键路径问题的基础。
深度优先搜索
深度优先搜索,是指在第一次经过顶点时,就对其进行访问。由于每次都会对指向的邻接且未被访问的顶点进行访问,总会遍历到图的某个路径结尾,出现周围没有未被访问的邻接顶点情况。所以,深度优先搜索隐含栈的思想,将已经访问过,且存在未被访问的邻接点的顶点压入栈中,当出现p指向的顶点不存在时,可以利用栈回溯其位置,找到其他未被访问的邻接顶点。图遍历完毕后,整个栈为空。如图例所示,深度优先搜到得到的序列是1,2,5,3,6,7,4。
广度优先搜索
广度优先搜索,”先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问。使用队列数据结构,将顶点放入队列中。当顶点出队时,将与该顶点邻接且未被访问的顶点入队。图遍历完毕后,队列为空。如图例所示,广度优先搜到得到的序列是1,2,3,4,5,6,7。
时间复杂度
深度优先搜索,广度优先搜索的时间复杂度相同。影响其时间复杂度的因素是存储结构。