DFS&BFS
1.深度优先遍历
基本思想:
从图中某顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点
出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到;
若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点
;
重复上述过程,直至图中所有顶点都被访问到为止。
分析:
在遍历图时,对图中每个顶点至多调用一次DFS函数,因为一旦某个顶点被
标志成已被访问,就不再从它出发进行搜索。
因此,遍历图的过程实质上是对每个顶点查找其邻接点的过程。其耗费的时
间则取决于所采用的存储结构。 当使用二维数组表示邻接矩阵作图的存储结构
时,查找每个顶点的邻接点所需时间为O(n^2),其中n为顶点数。而当以邻接表
作图的存储结构时,找邻接点所需时间为O(e),其中e为无向图中边的数目或有
向图中弧的数目。由此,当以邻接表作存储结构时,深度优先搜遍遍历图的时间
复杂度为O(n+e)。
1:DFS解决带权最短路径问题
2:DFS解决分块问题
3:DFS解决路径条数问题
4:棋盘问题、N皇后问题
。。。。。。
2.广度优先遍历
基本思想:
从图中某个顶点V0出发,并在访问此顶点后依次访问V0的所有未被访问过的
邻接点,之后按这些顶点被访问的先后次序依次访问它们的邻接点,直至图中所
有和V0有路径相通的顶点都被访问到;
若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点
;
重复上述过程,直至图中所有顶点都被访问到为止。
分析:
每个顶点至多进一次队列。遍历图的过程实质上是通过边或弧找邻接点的过
程,因此广度优先搜索遍历图的时间复杂度和深度优先搜索遍历相同,两者不同
之处仅仅在于对顶点访问的顺序不同。
1:BFS解决无权最短路径问题(带权不好回溯)
每个节点的状态相对于自己都是唯一的,而回溯的前提是不同路径到一个节点,该节点的状态可能存在变化
2:BFS解决分块问题
3:BFS解决倒水问题
。。。。。。