코딩캠프/BOJ
[2252] 줄 세우기
by 코곰_
2024. 2. 19.
#include <bits/stdc++.h>
#define NMAX 32001
using namespace std;
int N, M;
int s, e;
int visited[NMAX];
int inputEdgeCount[NMAX];
vector<int> ordered;
vector<int> adj[NMAX];
void dfs(int u){
visited[u] = 1;
for(int v: adj[u]){
if (visited[v] == 0) dfs(v);
}
ordered.push_back(u);
}
vector<int> topologicalSort(int N){
ordered.clear();
memset(visited, 0, sizeof(visited));
vector<int> startNode;
for(int i=1; i<=N; i++) {
if(inputEdgeCount[i] == 0){
startNode.push_back(i);
}
}
for(int i: startNode){
if(visited[i] == 0) dfs(i);
}
reverse(ordered.begin(), ordered.end());
return ordered;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
scanf("%d %d", &N, &M);
for(int i=0; i<M; i++){
scanf("%d %d", &s, &e);
adj[s].push_back(e);
inputEdgeCount[e]++;
}
vector<int> result = topologicalSort(N);
for (int i = 0; i < result.size(); i++) {
printf("%d ", result[i]);
}
return 0;
}