Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

난 정말 최고야 멋있어

줄세우기 위상정렬 with 큐 본문

하루 1공부

줄세우기 위상정렬 with 큐

n00bh4cker 2021. 1. 30. 05:13

내일은 재귀로 풀어야지!!!!

#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