단절점·다리 찾기
무향 그래프의 간선을 넣으면 없어지면 그래프가 쪼개지는 정점(단절점)과 간선(다리)을 타잔 알고리즘으로 찾습니다. 네트워크의 단일 고장점이 어디인지 그대로 확인할 수 있습니다.
한 줄에 하나씩 「A - B」로 적습니다. 방향은 무시하고 양방향으로 읽습니다. 정점은 26개까지.
단절점
2개
C, D 가운데 하나만 없어져도 그래프가 갈립니다. 가장 크게 갈리는 것은 C로, 지우면 2조각이 됩니다.
정점 — 지웠을 때 몇 조각이 되는가
파랗게 칠한 것이 단절점입니다. 지웠을 때 남는 연결 요소 수를 실제로 세어 붙였습니다. 이 자리들이 곧 단일 고장점이라, 이중화가 필요하다면 여기부터 봅니다.
다리 — 끊으면 곧바로 갈리는 간선
C — D
다리를 하나 끊으면 연결 요소가 언제나 정확히 하나 늘어납니다. 다리가 아닌 간선에는 그 간선을 건너뛰고 돌아가는 우회로가 반드시 있습니다.
2-간선 연결 요소 — 다리를 모두 끊었을 때 남는 덩어리
한 덩어리 안에서는 어느 간선이 끊겨도 서로 닿습니다. 덩어리 사이를 잇는 것이 전부 다리라, 회선 하나가 죽으면 그 경계에서 갈립니다.
disc와 low
| 정점 | disc | low | 부모 | 자식 | 단절점 |
|---|---|---|---|---|---|
| A뿌리 | 1 | 1 | — | 1 | |
| B | 2 | 1 | A | 1 | |
| C | 3 | 1 | B | 1 | ● |
| D | 4 | 4 | C | 1 | ● |
| E | 5 | 4 | D | 1 | |
| F | 6 | 4 | E | 0 |
disc는 몇 번째로 발견됐는지, low는 그 정점의 서브트리에서 트리 간선을 거꾸로 타지 않고 되돌아갈 수 있는 가장 작은 disc입니다. 트리 간선 u—v에서 low[v] > disc[u]이면 다리, low[v] ≥ disc[u]이면 u가 단절점입니다.
사용 방법
- 1간선을 한 줄에 하나씩 「A - B」로 적습니다. 공백이나 쉼표로 나눠도 됩니다. 방향은 무시하고 양방향으로 읽습니다.
- 2빨갛게 표시된 정점이 단절점입니다. 지웠을 때 몇 조각으로 갈리는지 함께 나옵니다.
- 3다리 목록에 있는 간선은 끊으면 곧바로 그래프가 둘로 갈라지는 회선입니다.
- 4disc·low 표에서 low가 부모의 disc보다 크면 그 위로 올라가는 우회로가 없다는 뜻입니다.
자주 묻는 질문
정점 하나를 지웠을 때 연결 요소가 늘어나면 그 정점이 단절점이고, 간선 하나를 지웠을 때 늘어나면 그 간선이 다리입니다. 네트워크로 보면 라우터 하나가 죽어 망이 두 동강 나는 자리, 회선 하나가 끊겨 지사가 고립되는 자리가 그것입니다. 정의가 「지워 보면 안다」라서 전수로도 구할 수 있지만, 타잔의 깊이 우선 탐색은 한 번의 훑기로 전부 찾아냅니다.
그 정점의 서브트리에서 트리 간선을 거꾸로 타지 않고 되돌아갈 수 있는 가장 작은 발견 순번(disc)입니다. 되돌아가는 길은 역방향 간선뿐입니다. 트리 간선 u—v에서 low[v] > disc[u]이면 v 쪽에서 u를 건너뛰고 위로 올라갈 길이 아예 없다는 뜻이라 그 간선이 다리입니다.
있습니다. 판정식의 부등호가 다르기 때문입니다. 다리는 low[v] > disc[u], 단절점은 low[v] >= disc[u]입니다. 부등호가 하나 느슨한 것은 v가 u 자신까지는 돌아올 수 있어도 u를 지우면 그 길마저 사라지기 때문입니다. 삼각형 두 개가 한 정점에서 만나는 모양이 그렇습니다 — 그 정점은 단절점이지만 다리는 하나도 없습니다.
시작 정점에는 위로 올라갈 부모가 없어 같은 식을 쓸 수 없기 때문입니다. 뿌리는 DFS 트리에서 자식이 둘 이상일 때만 단절점입니다. 자식이 하나면 그 정점을 지워도 나머지가 한 덩어리로 남습니다. 이 예외를 빠뜨리는 것이 이 알고리즘에서 가장 흔한 구현 실수입니다.
어느 쪽도 다리가 아니게 됩니다. 한 줄을 끊어도 다른 줄이 남기 때문입니다. 구현에서는 되돌아온 길이 부모인지 판정할 때 정점 이름으로 비교하면 두 번째 줄까지 부모로 오인해 무시하게 되어 다리가 아닌 간선을 다리로 잘못 잡습니다. 그래서 간선마다 번호를 붙여 들어온 그 번호만 건너뛰어야 합니다. 자기 자신으로 가는 간선은 연결성에 영향이 없어 처음부터 버립니다.
그쪽은 방향 그래프에서 서로 오갈 수 있는 묶음을 찾고, 이쪽은 무향 그래프에서 끊어지는 자리를 찾습니다. low-link라는 이름과 깊이 우선 탐색 뼈대가 닮아 헷갈리기 쉽지만 대상도 판정식도 다릅니다. 순환 의존을 볼 때는 SCC, 이중화가 필요한 자리를 볼 때는 이쪽입니다.
전송되지 않습니다. 모든 계산은 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 검증은 정의 그대로의 전수 탐색을 정답지로 삼아 했습니다. 정점과 간선을 하나씩 실제로 지워 보고 연결 요소가 늘어나는지 세는 방식이며, 무작위 그래프 500벌(정점 3~10개, 평행 간선·자기 순환·떨어진 덩어리 포함)에서 타잔의 결과와 완전히 일치하는 것을 확인했습니다.
- 전수 탐색 쪽에서 기준선을 잘못 잡아 「지워도 멀쩡한 정점」까지 단절점으로 세던 것을 이 대조에서 잡았습니다. 정점 u가 속한 덩어리가 k조각으로 갈리면 전체는 (기존 − 1 + k)가 되므로, 단절점 판정의 기준선은 기존 덩어리 수 그대로입니다.
- 다리를 끊으면 언제나 덩어리가 정확히 하나 늘어난다는 것, 다리의 양 끝 중 차수가 2 이상인 쪽은 반드시 단절점이라는 것을 무작위 300벌씩 따로 고정해 두었습니다.
- 2-간선 연결 요소(다리를 모두 끊었을 때 남는 덩어리)가 정점 전체를 빠짐없이 한 번씩 덮는지도 함께 검사합니다.
- 정점은 26개까지 다룹니다. 표와 목록을 함께 보이는 것이 목적이라 그보다 크면 화면이 읽히지 않습니다.
- 간선 입력은 위상 정렬·SCC 계산기와 같은 형식을 씁니다. 「A - B」, 「A B」, 「A, B」 모두 읽고 한 줄에 「A B C」가 오면 A—B, B—C로 읽습니다. 방향은 무시합니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.