๋ฐฑ์ค€/C++

[๋ฐฑ์ค€/C++] 2252๋ฒˆ ์ค„ ์„ธ์šฐ๊ธฐ

yulee_to 2022. 7. 16. 19:56

๋ฐฑ์ค€


๐Ÿค”๋ฌธ์ œ ์ดํ•ด

๋น„๊ต๋œ ํ•™์ƒ๋“ค์€ ๊ทธ ์ˆœ์„œ๋Œ€๋กœ ์ค„์„ ๋น„๊ต๋˜์ง€ ์•Š์€ ํ•™์ƒ๋“ค์€ ๊ทธ๋ƒฅ ๋žœ๋ค์œผ๋กœ ์ค„์„ ์„ธ์šฐ๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค.


๐Ÿ’ก์ฒซ๋ฒˆ์งธ ์•„์ด๋””์–ด

๋น„๊ต๋˜์ง€ ์•Š์€ ํ•™์ƒ๋“ค์„ ๋จผ์ € ๋งจ ์•ž์— ์„ธ์›Œ์ฃผ๊ณ  ๋น„๊ต๋œ ํ•™์ƒ๋“ค์€ "์ˆœ์„œ"๊ฐ€ ์ •ํ•ด์ง€๋ฏ€๋กœ ๊ทธ ํ•™์ƒ๋“ค์„ ์ˆœ์„œ์— ๋งž๊ฒŒ ์ค„์„ ์„ธ์šฐ๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ ธ๋‹ค. ๊ทธ๋ƒฅ ์œ„์ƒ์ •๋ ฌ ๋ฌธ์ œ.

 

๐Ÿ”ฅํ’€์ด๐Ÿ”ฅ

in_degree์˜ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ ๋จผ์ € queue์— ๋„ฃ์–ด์ค€๋‹ค.

queue๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€ popํ•œ ํ•™์ƒ์˜ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ ํ•™์ƒ ๋‹ค์Œ์œผ๋กœ ์ค„์„ ์„ค ์ˆ˜ ์žˆ๋Š” ํ•™์ƒ์˜ in_degree๋ฅผ -1ํ•ด์คฌ์„ ๋•Œ in_degree๊ฐ’์ด 0์ด๋ผ๋ฉด queue์— pushํ•ด์ค€๋‹ค.

๋น„๊ต๋œ ํ•™์ƒ์ด ์ค‘๋ณต๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ visited๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ ์ค„์„ ์„ธ์šด ํ•™์ƒ์€ ๋ฌด์‹œํ•ด์ค€๋‹ค.


#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int n, m;
vector<vector<int>> v;
int in_degree[32002];
bool visited[32002];
int main() {
    cin.tie(nullptr);
    cout.tie(nullptr);
    ios::sync_with_stdio(false);

    cin >> n >> m;
    v.resize(n + 2);

    int a, b;
    for (int i = 0; i < m; i++) {
        cin >> a >> b;
        v[a].push_back(b);
        in_degree[b]++;
    }

    queue<int> q;
    for (int i = 1; i <= n; i++) {
        if (in_degree[i] == 0) {
            q.push(i);
            visited[i] = true;
        }
    }

    while (!q.empty()) {
        int now = q.front();
        q.pop();
        cout << now << " ";

        for( int x : v[now]) {
            in_degree[x]--;
            if( in_degree[x] == 0 && !visited[x]) {
                visited[x] = true;
                q.push(x);
            }
        }
    }
}

 

๐Ÿ”—์ฐธ๊ณ ํ•  ๋ฌธ์ œ

https://yulee.tistory.com/23

 

728x90