728x90
반응형
[알고리즘] 그래프(Graph)에서 사이클(Cycle) 찾기
사이클을 찾기 위해서는 DFS를 활용한다. (정점 : v, 간선 : e)
- visited[] : 점들의 방문여부가 저장된 배열
- recur[] : v가 지금까지 방문한 점이 저장된 배열
for(v 수 만큼) {
dfs(v, visited, recur)
}
DFS 수도코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
boolean dfs(v(a), visited, recur) {
visited[v(a)] = true
recur[v(a)] = true
for(v(a)와 연결된 점의 수만큼) {
b = 연결된 점
if(!visited[b] && dfs(v(b), visited, recur){
// b가 방문상태 아니고, 다시 b 방문한 점들 확인 후 true면 사이클이므로 true 리턴
return true;
}
else if(recur[v(b)]) { //b가 이미 방문된 상태면 사이클이므로 true 리턴
return true;
}
recur[v(a)] = false; // dfs 위해 다시 false로 돌려주기
return false;
}
}
|
cs |
시간복잡도는 O(V+E)로 효율적인 사이클 탐색이 가능하다.
728x90
반응형
'Algorithm > 개념 정리' 카테고리의 다른 글
[알고리즘] 퀵소트(QuickSort) 구현 (C) (3) | 2020.01.09 |
---|---|
[알고리즘] LCA(Lowest Common Ancestor) (0) | 2019.08.25 |
[알고리즘] XOR 비트 연산을 활용하기 (0) | 2019.07.29 |
[자료구조/Java] 이진탐색트리 (Binary Search Tree) (1) | 2019.07.23 |
[자료구조/Java] 힙(Heap) 구현 (4) | 2019.07.17 |