https://www.acmicpc.net/problem/11581
11581번: 구호물자
서기 2050년 엄청나게 강력한 폭풍이 인천을 강타했다. 강력한 폭풍의 영향으로 모든 사람은 대피소로 대피하였으며, 많은 도로가 유실되었다. 그나마 남아있는 도로도 모든 표지판과 가로등이
www.acmicpc.net
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] visited;
static String answer = "NO CYCLE";
static ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
// visited = 0: 아직 방문하지 않은 상태
// visited = 1: 탐색 완료된 상태
// visited = -1: 방문 했지만 탐색 완료되지 않은 상태(탐색 중인 상태)
visited = new int[N + 1];
for (int i = 0; i <= N; ++i) {
graph.add(new ArrayList<Integer>());
}
for (int i = 1; i < N; i++) {
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
graph.get(i).add(Integer.parseInt(st.nextToken()));
}
}
findCycle(1);
System.out.println(answer);
}
private static void findCycle(int from) {
// dfs
// 현재 정점이 이미 방문된 상태인 경우
if (visited[from] == -1) {
// CYCLE 생성됨
answer = "CYCLE";
return;
}
// 방문 체크
visited[from] = -1;
// from에서 갈 수 있는 정점 모두 확인
for (int v : graph.get(from)) {
// 탐색 완료된 상태가 아니라면 해당 정점을 시작으로 탐색
if (visited[v] != 1) {
findCycle(v);
}
}
// 탐색 완료된 경우
visited[from] = 1;
}
}
'Baekjoon Online Judge > Java' 카테고리의 다른 글
[Baekjoon Online Judge] 4485 - 녹색 옷 입은 애가 젤다지? / Java (0) | 2021.09.29 |
---|---|
[Baekjoon Online Judge] 3055 - 탈출 / Java (0) | 2021.09.28 |
[Baekjoon Online Judge] 7576 - 토마토 / Java (0) | 2021.09.23 |
[Baekjoon Online Judge] 2210 - 숫자판 점프 / Java (0) | 2021.09.20 |
[Baekjoon Online Judge] 2636 - 치즈 / Java (0) | 2021.09.15 |