深度优先搜索是一种用于遍历或搜索树或图的算法。这个算法会尽可能深地搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。
以下是一个简单的深度优先搜索的Python代码示例和注释:
# 建立一个字典来表示图
graph = {
'A': ['B', 'C'],
'B': ['A', 'D', 'E'],
'C': ['A', 'F'],
'D': ['B'],
'E': ['B', 'F'],
'F': ['C', 'E'],
}
visited = set() # 准备一个集合用来存储已经访问过的节点
def dfs(visited, graph, node): # 定义深度优先搜索函数
if node not in visited: # 如果节点没有被访问过
print (node) # 打印节点
visited.add(node) # 把节点添加到已访问集合中
for neighbour in graph[node]: # 对于节点的每一个邻居
dfs(visited, graph, neighbour) # 递归调用深度优先搜索函数
# 从节点'A'开始
dfs(visited, graph, 'A')
visited
的集合,用来保存已经访问过的节点。dfs()
是我们的深度优先搜索函数,它接受三个参数:一个已访问节点集合,一个图以及一个当前节点。以上就是深度优先搜索的一种简单实现方法和它的基本思想。在实际应用中,深度优先搜索可能会更复杂,并且可能需要处理一些特殊情况,例如环路、权重等等。