2252 줄 세우기 코드도 똑같다. 

종강했다. 할게 많지만 알고리즘은 재밌어서 계속하게되는 것 같다. 

 

[적용한 알고리즘]

위상정렬

 

[아이디어]

[생각의 흐름 / 절차] 

 

[교훈]

위상정렬의 기본 코드라고 한다.

언제나 kks 블로그에서 배운다. 없었으면 큰일 났을 것 같다. 

 

<코드>

#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
const int MAX_V = 1002;

int main(){
    int N, M, indegree[MAX_V] = { 0 };
    vector<int> adj[MAX_V];
    scanf("%d %d", &N, &M);

    for (int i = 0; i < M; i++){
        int K; scanf("%d", &K);
        if (K == 0) continue;
        int from, to;
        scanf("%d", &from);

        for (int j = 1; j < K; j++){
            scanf("%d", &to);
            adj[from].push_back(to);
            indegree[to]++;
            from = to;
        }
    }

    int result[MAX_V] = { 0 };
    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()){
            puts("0");
            return 0;
        }

        int cur = Q.front();
        result[i] = cur;
        Q.pop();

        for (int nxt : adj[cur]){
            if (--indegree[nxt] == 0) Q.push(nxt);
        }
    }

    for (int i = 1; i <= N; i++){
        printf("%d\n", result[i]);
    }

    return 0;
}

'Algorithm > BOJ' 카테고리의 다른 글

[백준] 1725번 히스토그램  (0) 2019.12.27
[백준] 1005번 ACM Craft  (0) 2019.12.26
[백준] 11657번 타임머신  (0) 2019.11.29
[백준] 16681번 등산  (0) 2019.11.28
[백준] 1261번 알고스팟  (0) 2019.11.28

+ Recent posts