图的遍历
深度优先遍历:也有称为深度优先搜索,简称为\(DFS\)。深度优先遍历其实是一个递归的过程,就像是一棵树的前序遍历。从图中某个顶点\(v\)出发,访问此顶点,然后从\(v\)的未被访问的邻接点出发深度优先遍历图,直至图中所有和\(v\)有路径相通的顶点都被访问到。这里讲到的是连通图,对于非连通图,只需要对它的连通分量分别进行深度优先遍历,即在先前一个顶点进行一次深度优先遍历后,若图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。
广度优先遍历:又称为广度优先搜索,简称\(BFS\)。


图的遍历的代码
- 邻接矩阵的深度遍历递归算法 
- 邻接表的深度遍历递归算法 
邻接表的深度遍历非递归算法
下面这个算法是错误的,正确的算法见王道,或者再使用一个辅助栈,每次访问将边表先入辅助栈,然后再依次出栈入主栈

由于每个顶点表和边节点都要扫描一次,所以\(DFS\)算法的时间复杂度为\(O(n+e)\)邻接矩阵的广度优先遍历

邻接表的广度优先遍历


由于每个顶点表和边节点都要扫描一次,所以\(BFS\)算法的时间复杂度为\(O(n+e)\)假设一个无向图是非连通的,采用邻接表作为存储结构,试设计一个算法输出图中各连通分量的节点序列
假设\(G\)采用邻接表存储,试设计一个算法,判断无向图的\(G\)是一棵树,若是树返回\(1\),否则返回\(0\)。

无向图是树的条件为:无回路的连通图或者是有\(n-1\)条边的连通图假设一个有向连通图采用邻接表作为存储结构,试设计一个算法判断其中是否存在回路

采用深度优先遍历的方式,从顶点\(v\)出发,对每个访问过的节点\(w\)做标志\((visited[w]=1)\),若顶点\(w\)和顶点\(i\)均已经访问过,表示从\(w\)到\(i\)有一条路径,当从顶点\(i\)出发到达顶点\(w\)时,表示存在回路。「\(has的初始值为false\)」假设一个不带权值的无向图采用邻接表作为存储结构,求距离顶点\(v\)的最远的一个顶点。
假设不带权值的图\(G\)采用邻接表存储,设计算法判断从顶点\(u\)到顶点\(v\)之间是否有路径。
假设图采用邻接表存储,试设计一个算法,输出图\(G\)中从顶点\(u\)到\(v\)的所有简单路径。