본문 바로가기
Computer Science

백준 2252 줄 세우기 / 위상 정렬

by OKOK 2018. 12. 7.

1. 알고리즘

2. 벡터

3. 스택

4. 백터 백터

5. 오토 키워드

6. 먼저 1부터 넣어서, dfs를 돌려서 연결이 안되는 지점까지 가면

순서대로 스택에 넣습니다

그리고 마지막에 스택에서 빼면 됨

그리고 비지트의 경우, 방문했는지 안했는지를 체크하기 위해서 사용합니다

순서 확실히 하면 됨


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
31
32
33
34
35
36
37
38
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#include <iostream>
#define MAX_N 32000
using namespace std;
vector<vector<int>> vt;
stack<int> st;
int n, m, x, y, visited[MAX_N + 1];
void dfs(int v) {
    visited[v] = true;
    for (auto i : vt[v]) {
        if (visited[i])
            continue;
        dfs(i);
    }
    st.push(v);
}
int main() {
    
    freopen("input.txt""r", stdin);
    scanf("%d%d"&n, &m);
    vt.resize(n + 1);
    for (int i = 0; i < m; i++) {
        scanf("%d%d"&x, &y);
        vt[x].push_back(y);
    }
    for (int i = 1; i <= n; i++) {
        if (!visited[i])
            dfs(i);
    }
    while (st.size()) {
        printf("%d ", st.top());
        st.pop();
    }
    return 0;
}
cs


'Computer Science' 카테고리의 다른 글

1780 종이의 개수 / 분할 정복  (0) 2018.12.11
1766 문제집 / indgree 위상정렬  (0) 2018.12.07
공통 조상 찾기 트리  (0) 2018.12.07
expert / 블록 부품  (0) 2018.12.06
쿠리 / 더블 링크드 리스트  (0) 2018.12.06

댓글