def bfs(graph, start, end):
path = []
visited = [start]
while visited:
current = visited.pop(0)
if current not in path:
path.append(current)
if current == end:
print(path)
return (True, path)
# 两个顶点不相连,则跳过
if current not in graph:
continue
visited = visited + graph[current] # 仅有该行不同
return (False, path)
def dfs(graph, start, end):
path = []
visited = [start]
while visited:
current = visited.pop(0)
if current not in path:
path.append(current)
if current == end:
print(path)
return (True, path)
# 两个顶点不相连,则跳过
if current not in graph:
continue
visited = graph[current] + visited # 仅有该行不同
return (False, path)
def traverse(graph, start, end, action):
path = []
visited = [start]
while visited:
current = visited.pop(0)
if current not in path:
path.append(current)
if current == end:
return (True, path)
# 两个顶点不相连,则跳过
if current not in graph:
continue
visited = action(visited, graph[current]) # 调用区别函数
return (False, path)
# 区别部分
def extend_bfs_path(visited, current):
return visited + current
# 区别部分
def extend_dfs_path(visited, current):
return current + visited
还有一种不推荐的方案:
def traverse(graph, start, end, algorithm):
path = []
visited = [start]
while visited:
current = visited.pop(0)
if current not in path:
path.append(current)
if current == end:
return (True, path)
# 顶点不相连,则跳过
if current not in graph:
continue
if algorithm == BFS: # 通过 if-else 实现
visited = extend_bfs_path(visited, graph[current])
elif algorithm == DFS:
visited = extend_dfs_path(visited, graph[current])
else:
raise ValueError("No such algorithm")
return (False, path)