https://www.acmicpc.net/problem/14567
14567번: 선수과목 (Prerequisite)
3개의 과목이 있고, 2번 과목을 이수하기 위해서는 1번 과목을 이수해야 하고, 3번 과목을 이수하기 위해서는 2번 과목을 이수해야 한다.
www.acmicpc.net
#include <vector>
#include <iostream>
#include <queue>
#define MAX 1001 // 최대 노드 개수
using namespace std;
int n, m, inDegree[MAX];
vector<int> a[MAX];
int result[MAX];
void topologySort(){
queue<int> q;
// 진입차수가 0인 노드들 큐에 추가
for (int i=1;i<=n;i++){
if(inDegree[i] == 0){
q.push(i) ;
}
result[i] = 1;
}
for(int i=1;i<=n;i++){
if(q.empty()){
cout << "cycle !!"; // 싸이클 발생
return;
}
int x = q.front();
q.pop();
for (int i=0;i<a[x].size();i++){
int y = a[x][i];
// 진입차수--, 이때 진입차수가 0이되면 q에 삽입
if(--inDegree[y] == 0) {
q.push(y);
result[y] = max(result[y], result[x] + 1);
}
}
}
for (int i=1;i<=n;i++){
cout << result[i] << " ";
}
}
int main(){
cin >> n >> m;
int cnt;
for (int i=0;i<m;i++){
int x, y;
cin >> x >> y;
a[x].push_back(y);
inDegree[y]++; // 진입차수 증가
}
topologySort();
}
'자기개발👨💻 > 코딩 알고리즘' 카테고리의 다른 글
[C++] 백준 2178 미로탐색-dfs알고리즘-최단경로 (0) | 2023.11.04 |
---|---|
c++ 입출력 속도 향상 및 cin.tie 해야하는이유 (0) | 2023.11.03 |
[c++] 백준2232 벌집 c++ (0) | 2023.11.02 |
[C++] 백준 2056 작업 (0) | 2023.11.02 |
[Python] 백준 2559 수열 - 그리디 알고리즘 (0) | 2023.10.24 |
[Python] 백준 2559 수열 - 투포인터 알고리즘 (0) | 2023.10.24 |