用于检测有向图中的循环的 Python 程序
pythonserver side programmingprogramming
在本文中,我们将了解下面给出的问题陈述的解决方案。
问题陈述 − 给定一个有向图,我们需要检查该图是否包含循环。如果给定的图至少包含一个循环,则输出应为真,否则为假。
现在让我们观察下面实现中的解决方案 −
示例
# collections 模块 from collections import defaultdict # 用于创建图的类 class Graph(): # 构造函数 def __init__(self, vertices): self.graph = defaultdict(list) self.V = vertices def addEdge(self, u, v): self.graph[u].append(v) def isCyclicUtil(self, v, visited, recStack): # 标记当前节点已访问并添加到递归堆栈 visited[v] = True recStack[v] = True # 如果任何邻居被访问且在 recStack 中,则图本质上是循环的 for neighbour in self.graph[v]: if visited[neighbour] == False: if self.isCyclicUtil(neighbour, visited, recStack) == True: return True elif recStack[neighbour] == True: return True # 递归结束后弹出节点 recStack[v] = False return False # 如果图是循环的,则返回 true def isCyclic(self): visited = [False] * self.V recStack = [False] * self.V for node in range(self.V): if visited[node] == False: if self.isCyclicUtil(node, visited, recStack) == True: return True return False g = Graph(4) g.addEdge(0, 3) g.addEdge(0, 2) g.addEdge(3, 2) g.addEdge(2, 0) g.addEdge(1, 3) g.addEdge(2, 1) if g.isCyclic() == 1: print ("Graph is cyclic in nature") else: print ("Graph is non-cyclic in nature")
输出
Graph is cyclic in nature
所有变量都在本地范围内声明,它们的引用如上图所示。
结论
在本文中,我们了解了如何编写 Python 程序来检测有向图中的循环