class Graph:
def __init__(self, vertices):
self.vertices = vertices
self.graph = {}
def add_edge(self, u, v):
if u not in self.graph:
self.graph[u] = []
self.graph[u].append(v)
def is_cyclic_util(self, v, visited, rec_stack):
visited[v] = True
rec_stack[v] = True
if v in self.graph:
for neighbor in self.graph[v]:
if not visited[neighbor]:
if self.is_cyclic_util(neighbor, visited, rec_stack):
return True
elif rec_stack[neighbor]:
return True
rec_stack[v] = False
return False
def is_cyclic(self):
visited = {v: False for v in range(self.vertices)}
rec_stack = {v: False for v in range(self.vertices)}
for vertex in range(self.vertices):
if not visited[vertex]:
if self.is_cyclic_util(vertex, visited, rec_stack):
return True
return False
# Приклад використання
if __name__ == "__main__":
# Створення графа та додавання ребер
g = Graph(4)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(2, 3)
g.add_edge(3, 3)
# Перевірка, чи є граф ациклічним
if g.is_cyclic():
print("Граф містить цикли.")
else:
print("Граф є ациклічним.")