난 정말 최고야 멋있어
줄세우기 위상정렬 with 큐 본문
내일은 재귀로 풀어야지!!!!
#include <iostream>
#include <vector>
#include <queue>
#define MAX 32001
using namespace std;
int n,m;
vector<int> vec[MAX];
int indegree[MAX];
queue<int> q;
int main(){
cin >> n >> m;
for (int i = 0 ; i < m ; i++){
int j,k;
cin >> j >> k;
indegree[k]++;
vec[j].push_back(k);
}
for (int i = 1; i <= n ; i++){
if (indegree[i] == 0)
q.push(i);
}
for (int i = 0 ; i < n ; i++){
int x = q.front();
q.pop();
cout << x << endl;
for (auto &c : vec[x]){
indegree[c]--;
if (!indegree[c]){
q.push(c);
}
}
}
}
위상정렬 큐를 이용해서 풀었음니다
일단 사이클이 없다는 전제하에 위상정렬의 출력은 총 n번 일어납니다
위상정렬이란건
재귀로도 가능하고 큐로도 가능한데요
사실 그래프 문제입니다
j가 k에 앞서야 하니까
j -> k 이런식이 되겠쬬????
k의 들어오는 녀석을 indegree라 하겠스빈다
걔를 넣어주고요
j담에 있어야할 친구들을 벡터에 넣어줍니다!!
인디그리가 빵이면 큐에 넣어주세요
'하루 1공부' 카테고리의 다른 글
백준 알고리즘 기초강의 2 -2 큐 덱 문자열 (0) | 2021.02.03 |
---|---|
백준 알고리즘 기초강의 2 스택 (0) | 2021.02.01 |
백준 알고리즘 기초 강의 1 입출력 (0) | 2021.01.31 |
퇴사 (0) | 2021.01.27 |
거스름돈 (0) | 2021.01.27 |