https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV18TrIqIwUCFAZN&categoryId=AV18TrIqIwUCFAZN&categoryType=CODE&problemTitle=%EC%9E%91%EC%97%85&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1&&&&&&&&&

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

 

 

 

 

#문제 간단 정리

위상정렬

 

#문제 해결 방법

정석적인 위상정렬이기 때문에

위상정렬 코드를 구현하도록 하자

 

#전체 코드

 

#include <iostream>
#include <queue>
#include <vector>
 
using namespace std;
 
int main()
{
     
    for (int T = 1; T <= 10; T++) {
        int V, E;
        cin >> V >> E;
 
        vector<vector<int>> graph(V + 1);
        vector<int> indegree(V + 1, 0);
 
        for (int i = 1; i <= E; i++) {
 
            int u, v;
            cin >> u >> v;
            graph[u].push_back(v);
            indegree[v]++;
 
        }
 
        queue<int> q;
 
        cout << '#' << T << ' ';
 
        for (int i = 1; i <= V; i++) {
            if (indegree[i] == 0) {
                cout << i << ' ';
                q.push(i);
            }
        }
 
 
  
       
        while (!q.empty()) {
            int front = q.front();
            q.pop();
 
            for (auto nextNode : graph[front]) {
 
                indegree[nextNode] --;
 
                if (indegree[nextNode] == 0) {
                    cout << nextNode << ' ';
                    q.push(nextNode);
                }
            }
 
        }
 
 
        cout << '\n';
   }
 
}

+ Recent posts