# BaekJoon 2252 줄세우기
풀이 방법 및 배워야할 것:
- 위상 정렬 기본 문제
- 동빈나 알고리즘강좌(블로그 (opens new window), 유튜브 (opens new window))를 토대로 작성
- 응용하기 위해 많은 연습 필요
풀이 코드 :
#include <iostream>
#include <vector>
#include <queue>
#define MAX 32001
using namespace std;
int n, inDegree[MAX];
vector<int> a[MAX];
void topologySort() {
int result[MAX];
queue<int> q;
for (int i = 1; i <=n;i++){
if(inDegree[i] == 0) q.push(i);
}
for(int i = 1; i<=n; i++){
if(q.empty()) {
return;
}
int x = q.front();
q.pop();
result[i]= x;
for(int i=0; i<a[x].size();i++){
int y = a[x][i];
if(--inDegree[y] == 0)
q.push(y);
}
}
for (int i=1;i<=n;i++) {
cout << result[i] << " ";
}
}
int main(void){
cin.tie(0);
ios_base::sync_with_stdio(0);
int N, M;
cin >> N >> M;
for (int i=0;i<M;i++){
int tmp1, tmp2;
cin >> tmp1 >> tmp2;
a[tmp1].push_back(tmp2);
inDegree[tmp2]++;
}
n=N;
topologySort();
}