📅  最后修改于: 2023-12-03 14:55:44.399000             🧑  作者: Mango
本文介绍的算法用于检查仅 S 和 T 重复的无向图中节点 S 和 T 之间是否存在循环。无向图是由一组节点和边组成的数据结构,其中节点之间的连接关系没有方向。循环表示在图中存在一条路径,该路径从一个节点出发经过一系列的节点最终回到出发节点。
为了检查无向图中节点 S 和 T 之间是否存在循环,我们可以使用深度优先搜索(DFS)算法来遍历图,并查找是否存在从节点 T 到节点 S 的路径。
具体的算法步骤如下:
def has_cycle(graph, S, T):
visited = set() # 记录已访问的节点集合
def dfs(node):
nonlocal visited
if node in visited: # 检查是否已访问
return True
if node == T: # 找到路径
return True
visited.add(node) # 标记当前节点为已访问
for neighbor in graph[node]: # 递归遍历邻居节点
if dfs(neighbor):
return True
return False
# 从节点 S 开始执行DFS
return dfs(S)
# 创建无向图
graph = {
'A': ['B', 'C'],
'B': ['A', 'C'],
'C': ['A', 'B', 'D'],
'D': ['C'],
'E': ['F'],
'F': ['E']
}
# 检查节点 'A' 和 'B' 之间是否存在循环
result = has_cycle(graph, 'A', 'B')
if result:
print("存在循环")
else:
print("不存在循环")
输出:
存在循环
以上示例中,我们创建了一个无向图,并检查了节点 'A' 和 'B' 之间是否存在循环。由于节点 'A' 和 'B' 之间存在连接关系,因此存在循环。