一、BFS(广度优先)
1.搜索方式
顾名思义,就是以广度优先,一层一层搜索。
以此图为例,进行遍历:
A -> B -> C -> D -> E -> F -> G -> H-> I -> J -> K -> L -> M
当我们遍历到B时,我们将B的子节点存入队列中,然后再一个一个从队列中一个一个遍历。
2.代码模板
def BFS(graph,s): #graph是图/树/...的列表或者字典
#s是图/树的初始节点
q = [] #初始化一个队列q
q.append(s)
seen=[] #seen用来记录被搜索过的点
seen.append(s)
while len(q)>0:
vertex=q.pop(0) #vertex存储本次遍历对象
nodes=graph[vertex] #nodes存储vertex的子节点
for i in nodes:
if w not in seen: #将子节点入队
q.append(s)
seen.append(s)
二、DFS(深度优先)
1.搜索方式
顾名思义,就是以深度优先,每一次都到最深处再返回继续遍历。
以此图为例,进行遍历:
A -> B -> D-> E -> I -> J -> C -> F -> G -> K -> L -> H -> M
当我们遍历到B时,我们将B的子节点存入栈中,然后再一个一个从栈中一个一个遍历。
2.代码模板
def DFS(graph,s): #graph是图/树/...的列表或者字典
#s是图/树的初始节点
stack = [] #初始化一个栈stack
stack.append(s)
seen=[] #seen用来记录被搜索过的点
seen.append(s)
while len(stack)>0:
vertex=stack.pop() #vertex存储本次遍历对象
nodes=graph[vertex] #nodes存储vertex的子节点
for i in nodes:
if w not in seen: #将子节点入栈
q.append(s)
seen.append(s)