Skip to content

Latest commit

 

History

History
63 lines (47 loc) · 1.17 KB

File metadata and controls

63 lines (47 loc) · 1.17 KB

Проверка наличия цикла в графе

| Главная | Графы |

Дан граф, требуется проверить наличие цикла в этом графе.

Реализация

  • Ориентированный граф, покраска в три цвета

Время
O(V + E)
Цвет Код цвета
White 0
Grey 1
Black 2
def dfs(graph, v, visited):
    visited[v] = 1
    for u in graph[v]:
        if visited[u] == 0:
            dfs(graph, u, visited)
        if visited[u] == 1:
            print('Edge:', v, '-', u, 'created loop')
        visited[v] = 2


g = {
    0: [1],
    1: [2],
    2: [3],
    3: [6],
    4: [2],
    5: [1],
    6: [2, 4, 5]
}


def find_graph_loop(graph):
    visited = dict().fromkeys(graph, 0)
    for v in graph:
        if visited[v] == 0:
            dfs(g, v, visited)


find_graph_loop(g)
"""
Edge: 6 - 2 created loop
Edge: 4 - 2 created loop
Edge: 5 - 1 created loop
"""