from collections import deque
def bfs(start):
queue = deque([start])
visited = set([start])
while queue:
node = queue.popleft() # 关键:先进先出
for neighbor in node.neighbors:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
DFS 模板(课程依赖风格)
python复制代码
# 递归版(最常用)
def dfs(node, visited, path):
if node in path: # 检测环
return True
if node in visited:
return False
visited.add(node)
path.add(node)
for neighbor in node.neighbors:
if dfs(neighbor, visited, path):
return True
path.remove(node)
return False
# 迭代版(避免递归深度限制)
def dfs_iterative(start):
stack = [start]
visited = set()
while stack:
node = stack.pop() # 关键:后进先出
if node not in visited:
visited.add(node)
for neighbor in node.neighbors:
stack.append(neighbor)