본문으로 건너뛰기
김신건의 로그

Cycle Detection: 그래프 사이클 탐지

· 수정 · 📖 약 1분 · 162자/단어 #algorithm #graph #cycle
Cycle Detection, 사이클 탐지, cycle finding

정의

그래프에 사이클이 존재하는가, 또는 어느 사이클인가 를 찾는 문제.

무향 그래프

Union-Find 접근

간선 (u, v) 삽입 시 find(u) == find(v) 이면 사이클.

DSU dsu(n);
for (auto [u, v] : edges) {
    if (dsu.same(u, v)) { /* 사이클! */ }
    else dsu.merge(u, v);
}

DFS 접근

부모가 아닌 방문 완료 정점으로 되돌아가면 사이클.

유향 그래프

DFS + 3 색

  • 흰색: 미방문
  • 회색: DFS 스택 위
  • 검은색: 완료 회색 정점으로 가는 간선 = back edge = 사이클.
vector<int> color;  // 0/1/2

bool dfs(int u, vector<vector<int>>& adj) {
    color[u] = 1;
    for (int v : adj[u]) {
        if (color[v] == 1) return true;              // back edge
        if (color[v] == 0 && dfs(v, adj)) return true;
    }
    color[u] = 2;
    return false;
}

Kahn’s 활용

위상 정렬 로 얻은 순서 크기 < N 이면 사이클 존재.

참고

이 글의 용어 (3개)
분리 집합 (Disjoint Set, Union-Find)algorithm
정의 분리 집합 (Disjoint Set, Union-Find) 은 서로 겹치지 않는 집합들을 관리하며, 다음 두 연산을 거의 상수 시간 (amortized O(α(N)), α는…
위상 정렬 (Topological Sorting)algorithm
정의 위상 정렬 (Topological Sorting) 은 방향 비순환 그래프 (DAG) 의 모든 정점을 간선 방향을 어기지 않도록 일렬로 나열하는 것. 간선 가 있으면 정렬 결…
Tarjan SCC: 강한 연결 요소 O(V+E)algorithm
정의 Strongly Connected Component (SCC) 는 유향 그래프에서 서로 도달 가능한 정점들의 극대 집합입니다. Tarjan's algorithm 은 단일 D…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기