天才就是无止境刻苦勤奋的能力
卡莱尔
时隔这么久,也算是重新找回了自己的节奏了吧,对于我自己本不该在此篇章中过多言谈,不过逐渐从无规律的、支离破碎的作息和糟糕的身体状态中回转还是心有所感的。话不多谈,回正本文正题,BFS与DFS。
一、DFS
1.什么是DFS
DFS(即Depth First Search),中文名为深度优先搜索。通俗的讲,DFS就是一条路走到黑,为了方便大家理解DFS的原理,下面附上此图来展示DFS实现过程:

我们从A出发沿着红色箭头前往B,之后还能继续到C,之后没有新的节点能继续深入,此时选择回退,沿着绿色箭头先回到了B,发现只有C是B继续深入的路径,但是C节点我们已经访问过了,所以选择继续回退到A,同样的我们可以继续选择除了B的D和G进行深入,每一次都确保完全的深入的这一棵数,全部遍历一遍采用的这种方法就是DFS的一个很形象的应用。
或者我们再换句话说,就是能走我一定会继续走,只有到达死路之后我才会决定回退到上一步看看还有没有别的路能继续走下去,每个节点保证都会遍历到。
2.模板(代码实现)
3.经典例题
二、BFS
1.什么是BFS
BFS(即Breadth First Search),中文名为广度优先搜索。在了解了DFS是怎么样的深度优先之后,广度优先搜索就显得没那么难理解了,BFS就是”广撒网“,每一条可能的路径我都要同时去走,每次只走相同的距离,结合下图能帮助更好理解什么是“广撒网”:

我们依旧是从A点出发,有三种选择即B,D和G,我们选择三者同时前往,如红色箭头所示,之后对于每个节点采取A节点相同的操作直至遍历到最后。不难看出BFS相较于DFS过程显得相当的清楚,不难发现BFS每次搜索到的节点都是离当前节点最近的节点,即BFS具有最短路性质。我们常说DFS通常用来找任意一个可行解,而BFS则可以找最优解,就是利用了BFS的最短路性质,望读者仔细思考。

