반응형
https://www.acmicpc.net/problem/14567
문제 해결 알고리즘
전형적인 위상 정렬 문제이다.
아래의 링크에 위상 정렬 알고리즘에 대한 자세한 설명이 나와있다.
https://kimmessi.tistory.com/207
소스 코드
#include <bits/stdc++.h>
using namespace std;
int v, e, cnt = 1;
int indegree[1001];
vector<int> graph[1001];
void topologySort(){
vector<int> result(1001);
queue<int> q;
for(int i=1;i<=v;i++){
if(indegree[i] == 0){
q.push(i); result[i] = cnt;
}
}
cnt++;
while(!q.empty()){
int now = q.front();
q.pop();
for(int i=0;i<graph[now].size();i++){
indegree[graph[now][i]] -= 1;
if(indegree[graph[now][i]] == 0){
q.push(graph[now][i]);
result[graph[now][i]] = result[now]+1;
}
}
}
for(int i=1;i<=v;i++) cout << result[i] << ' ';
}
int main(){
cin >> v >> e;
for(int i=0;i<e;i++){
int a, b;
cin >> a >> b;
graph[a].push_back(b);
indegree[b]+=1;
}
topologySort();
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[위상 정렬] BOJ 1005 ACM Craft (0) | 2022.06.20 |
---|---|
[위상 정렬] BOJ 2056 작업 (0) | 2022.06.19 |
[백트래킹] BOJ 9663 N-Queen (0) | 2022.06.14 |
[LIS, 이분 탐색] BOJ 12738 가장 긴 증가하는 부분 수열 3 (C++) (0) | 2022.06.13 |
[LIS, DP] BOJ 11053 가장 긴 증가하는 부분 수열 (C++) (0) | 2022.06.13 |