문제 주소 : www.acmicpc.net/problem/2252
문제 확인
위상 정렬 문제입니다.
위상 정렬이란 간단하게 말해서 사이클이 없는 방향 그래프에서 방향을 한쪽으로 몰아세우는 정렬 방법입니다.
자세한 설명은 다음 블로그에서 잘 해두었습니다.
풀이
알고리즘을 그대로 사용하면 간단하게 풀리는 문제입니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
queue<int> bfs;
vector<int> graph[32001];
int indegree[32001] = { 0 };
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
graph[a].push_back(b);
indegree[b]++;
}
for (int i = 1; i <= n; i++)
if (!indegree[i])
bfs.push(i);
while (!bfs.empty()) {
int cur = bfs.front();
bfs.pop();
cout << cur << ' ';
for (int next : graph[cur])
if (!(--indegree[next]))
bfs.push(next);
}
}
|
cs |
반응형
'알고리즘 문제 > [백준]' 카테고리의 다른 글
[백준] 1111 IQ Test (4) | 2021.01.26 |
---|---|
[백준] 2534 카드 배열 (0) | 2021.01.25 |
[백준] 6549 히스토그램에서 가장 큰 직사각형 (1) | 2021.01.22 |
[백준] 16287 Parcel (0) | 2021.01.21 |
[백준] 1256 사전 (0) | 2021.01.20 |