BFS (seen数组+队列)
BFS通用模板
while queue 不空:
cur = queue.pop()
for 节点 in cur的所有相邻节点:
if 该节点有效且未访问过:
queue.push(该节点)
#需要记录当前时第几层的通用模板
level = 0
while queue 不空:
size = queue.size()
while (size --) {
cur = queue.pop()
for 节点 in cur的所有相邻节点:
if 该节点有效且未被访问过:
queue.push(该节点)
}
level ++;
#seen数组+队列
def BFS(graph, s):
queue = []
queue.append(s) # 向list添加元素,用append()
seen = set() # 此处为set, python里set用的是hash table, 搜索时比数组要快。
seen.add(s) # 向set添加函数,用add()
while (len(queue) > 0):
vertex = queue.pop(0) # 弹出第一个元素
nodes = graph[vertex]
for w in nodes:
if w not in seen:
queue.append(w)
seen.add(w)
print(vertex)
DFS(seen数组+栈、递归)
#seen数组+栈
def DFS(graph, s):
stack = []
stack.append(s) # 向list添加元素,用append()
seen = set() # 此处为set, python里set用的是hash table, 搜索时比数组要快。
seen.add(s) # 向set添加函数,用add()
while (len(stack) > 0):
vertex = stack.pop() # 弹出最后一个元素
nodes = graph[vertex]
for w in nodes:
if w not in seen:
stack.append(w)
seen.add(w)
print(vertex)
#递归版
seen = set()
def DFS(graph, s, seen):
if s in seen:
return
list.append(s)
print(s)
seen.add(s)
for w in graph[s]:
if w not in seen:
DFS(graph, w, seen)