해결된 질문
작성
·
277
1
import java.io.*;
import java.util.*;
public class Main {
static final int MAX = 100000 + 10;
static ArrayList<Integer>[] graph;
static boolean[] visited;
static int[] answer;
static int N, M, R;
static int order;
public static void dfs(int idx) {
visited[idx] = true;
answer[idx] = order;
order++;
for (int i = 0; i < graph[idx].size(); i++) {
int next = graph[idx].get(i);
if (!visited[next]) {
dfs(next);
}
}
}
public static void main(String[] args) throws IOException {
// 0. 입력 및 초기화
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
graph = new ArrayList[MAX];
for (int i = 1; i <= N; i++) {
graph[i] = new ArrayList<>();
}
visited = new boolean[MAX];
answer = new int[MAX];
order = 1;
for (int i = 0; i < M; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
graph[x].add(y);
graph[y].add(x);
}
// 2. 내림차순 정렬
for (int j = 0; j < N; j++) {
Collections.sort(graph[j], Collections.reverseOrder());
}
// 3. 재귀함수 출력
dfs(R);
for (int k = 1; k <= N; k++) {
bw.write(String.valueOf(answer[k]));
bw.newLine();
}
br.close();
bw.close();
}
}
해당 코드를 구현했는데, 널 포인터 에러가 뜹니다..!
어떤 부분에서 잘못됐는지 피드백 받고자 질문드립니다!
감사합니다
답변 1
1
버럼님 안녕하세요 :)
올려주신 코드 확인했는데 정렬하는 부분에서 반복문을 0부터 N미만까지 돌고 있어서 0번 인덱스를 접근할 때 null pointer exception이 발생하는 것 같아요!
생성하실 때는 1부터 N 이하까지 제대로 생성됐지만, sorting시의 인덱스가 잘못된 것 같고, 이것만 수정하면 큰 문제 없을 것 같습니다:)
오늘도 공부 화이팅하세요!!