广度优先搜索和深度优先搜索在大数据分析、NLP、搜索中广泛应用。 比如我们要查从北京到广州到铁路路线
广度优先搜索
广度优先搜索即Breadth-First-Search BFS


def BFS(graph, start, end):
"""
Breath First Search
:param graph 路线关系
:param start 起始点
:param end 终点
"""
# 使用队列
queue = []
# 入列第一个点
queue.append([start])
# 记录访问过的点
visited = set()
while queue:
# 队列弹出
node = queue.pop()
if node in visited:
# 已经访问过的跳过
continue
visited.add(node)
process(node)
# 得到子节点
for child in graph[node]:
if child in visited:
continue
# 将子节点加到队列尾部
queue = [child] + queue
深度优先搜索


def DFS(graph, start, end):
"""
Depth First Search
:param graph 路线关系
:param start 起始点
:param end 终点
"""
# 使用队列
queue = []
# 入列第一个点
queue.append([start])
# 记录访问过的点
visited = set()
while queue:
# 队列弹出
node = queue.pop()
if node in visited:
# 已经访问过的跳过
continue
visited.add(node)
process(node)
# 得到子节点
for child in graph[node]:
if child in visited:
continue
# 将子节点加到队列头部
queue = queue + [child]
DFS递归写法
visited = set()
def DFS(graph, node, visited):
"""
:param graph 路线关系
"""
visited.add(node)
# 处理当前节点
process(node)
for next_node in graph[node]:
if not next_node in visited:
DFS(graph, next_node, visited)