0. 문제
1. 문제 이해
- 위상 정렬
- BFS
2. 제출
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ2252 {
static int N, M;
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());
M = Integer.parseInt(st.nextToken());
ArrayList<Integer>[] list = new ArrayList[N+1];
int size = N+1;
for(int i=0; i<size; i++) {
list[i] = new ArrayList<Integer>();
}
int[] inDegree = new int[N+1];
int from, to;
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
from = Integer.parseInt(st.nextToken());
to = Integer.parseInt(st.nextToken());
list[from].add(to);
inDegree[to]++;
}
ArrayList<Integer> res = new ArrayList<>();
Queue<Integer> q = new ArrayDeque<>();
for(int i=1; i<size; i++) {
if(inDegree[i]==0) q.offer(i);
}
while(!q.isEmpty()) {
int cur = q.poll();
res.add(cur);
for(int idx : list[cur]) {
inDegree[idx]--;
if(inDegree[idx] == 0)
q.offer(idx);
}
}
StringBuffer sb = new StringBuffer();
for(Integer i : res) {
sb.append(i).append(" ");
}
System.out.println(sb);
br.close();
}
}
Code language: JavaScript (javascript)