(알고리즘) 그래프, 트리에서 Cycle 탐지하기

첫번째, 재귀를 이용한 방법

(Directed Graph)
http://www.geeksforgeeks.org/detect-cycle-in-a-graph/

(Undirected Graph)
http://www.geeksforgeeks.org/detect-cycle-undirected-graph/


두번째, Stack을 이용한 방법

--->방문한 점인데, 현재 Stack안에 그 노드가 있으면 Cycle이다.
--->st.contains(k)

void DFSUtil(boolean visited[], int i, Stack<Integer> st) {
st.push(i);
visited[i] = true;
for (int k : adj[i]) {
if (!visited[k])
DFSUtil(visited, k, st);
else if (st.contains(k))
flag = 1;
}
if (flag != 1)
st.pop();
}

void DFS() {
Stack<Integer> st = new Stack<Integer>();
boolean visited[] = new boolean[V];
for (int i = 0; i < V; i++) {
if (!visited[i])
DFSUtil(visited, i, st);
}
}

댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬