|
|
|
图一是BFS(广度优先搜索)在树的情况下的执行过程,从A出发,搜索A的第二层,发现有B,C,D(必须从左到右搜索),再搜索B的第二层,发现B的第二层没有元素,再搜索C的第二层,发现有E,F,放置于D后面,再搜索D的第二层,发现有G,放置于F后面,再往下搜索E,F,G,发现只有G有第二层H和I,所以最后得到:
A B C D E F G H I
图二是BFS(广度优先搜索)在图的情况下的执行过程,假设从A出发,第二层是B和C,先搜索B的第二层,发现有D,再搜索C的第二层,发现只有E了,最后D,E中只有D有第二层F,所以最后得到:
A B C D E F
⚠️:这里不可以是:A B C E D F
,因为必须先搜索B的第二层再搜索C的第二层
同理以E为起始点可以得到:E C D A B F
(不同的起始点的路径不同)
BFS在python中实现运用了Queue(队列)将搜索结果进行排列
|
|
图4是DFS(深度优先搜索)在图的情况下的执行过程,其规则是从起始点往下走,走到底再返回,直到走完所有点:
从起始点A出发->B->C->D->F(此时到底了,返回)->E->C(此时所有点都走完了)
DFS在python中实现运用了Stack(栈)将搜索结果进行堆砌:
将起始点A先放入栈->拿出A,A后可以选择走B和C->将B,C放入栈->拿出B,B之后只能走D->将D放入栈->拿出D,D之后可以走E,F->将E,F放入栈->拿出F,F之后到底了->无放入->拿出E->拿出C
最后得到 A B D F E C
(不同的起始点的路径不同)
完整python代码解析
从‘A’出发:
BFS得到A B C D E F
(答案不唯一)
DFS得到A B D F E C
(答案不唯一)
用字典的映射去表示图2
>>> graph = {
... 'A': ['B', 'C'],
... 'B': ['A', 'C', 'D'],
... 'C': ['A', 'B', 'D', 'E'],
... 'D':