一、BFS
BFS又称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索之一。这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了宽度优先搜索类似的思想。BFS属于一种盲目搜索法,目的是系统的展开并检查图中的所有节点,以找寻结果。它并不考虑结果的可能位置,彻底的搜索整张图知道找到结果为止。
广度优先就类似树里面的层序遍历,每次访问的是同层的节点,同层访问后再继续向下访问,这里我们用队列来实现,利用队列的先进先出性质,每次递增访问,这样通过广度优先,我们可以得到迷宫这样题型的最短路径。
二、DFS
DFS又称深度优先遍历,即深度越大的节点会被优先扩展。在DFS中使用栈数据结构来实现上述特征。
类似树从干路到支路的先序遍历方式,形象的说就是一条路走到黑,如果走到头了,则返回上一个节点,所以我们很自然会想到用递归实现,另外加一个标记数组,确保节点只访问一次。(这里建议邻接矩阵跟标记数组全部使用全局变量,不然的话函数传参会很麻烦),每次递归后都会找到与之相邻的节点,并再次递归,直到所有节点全部遍历一次。