๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 5567๋ฒˆ: ๊ฒฐํ˜ผ์‹ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 5567๋ฒˆ: ๊ฒฐํ˜ผ์‹ - C++

.23 2022. 1. 19. 13:50
๋ฌธ์ œ

์ƒ๊ทผ์ด๋Š” ์ž์‹ ์˜ ๊ฒฐํ˜ผ์‹์— ํ•™๊ต ๋™๊ธฐ ์ค‘ ์ž์‹ ์˜ ์นœ๊ตฌ์™€ ์นœ๊ตฌ์˜ ์นœ๊ตฌ๋ฅผ ์ดˆ๋Œ€ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ƒ๊ทผ์ด์˜ ๋™๊ธฐ๋Š” ๋ชจ๋‘ N๋ช…์ด๊ณ , ์ด ํ•™์ƒ๋“ค์˜ ํ•™๋ฒˆ์€ ๋ชจ๋‘ 1๋ถ€ํ„ฐ N๊นŒ์ง€์ด๋‹ค. ์ƒ๊ทผ์ด์˜ ํ•™๋ฒˆ์€ 1์ด๋‹ค.

์ƒ๊ทผ์ด๋Š” ๋™๊ธฐ๋“ค์˜ ์นœ๊ตฌ ๊ด€๊ณ„๋ฅผ ๋ชจ๋‘ ์กฐ์‚ฌํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐํ˜ผ์‹์— ์ดˆ๋Œ€ํ•  ์‚ฌ๋žŒ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด์˜ ๋™๊ธฐ์˜ ์ˆ˜ n (2 ≤ n ≤ 500)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด m (1 ≤ m ≤ 10000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„๋ถ€ํ„ฐ m๊ฐœ ์ค„์—๋Š” ์นœ๊ตฌ ๊ด€๊ณ„ ai bi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ ai < bi ≤ n) ai์™€ bi๊ฐ€ ์นœ๊ตฌ๋ผ๋Š” ๋œป์ด๋ฉฐ, bi์™€ ai๋„ ์นœ๊ตฌ๊ด€๊ณ„์ด๋‹ค. 

 

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด์˜ ๊ฒฐํ˜ผ์‹์— ์ดˆ๋Œ€ํ•˜๋Š” ๋™๊ธฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์ด์šฉํ•ด์„œ ํ‘ธ๋Š” ๋ฌธ์ œ. BFS๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค.

์ตœ๋Œ€ํ•œ ๋‚ด ํž˜์œผ๋กœ, ๋‚ด ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด๋ณด๋ ค๊ณ  ์•„๋ฌด๊ฒƒ๋„ ์•ˆ๋ณด๊ณ  ํ’€์—ˆ๋Š”๋ฐ ํšจ์œจ์ ์ด์ง€๋„ ์•Š๊ณ  ์˜ˆ์˜์ง€๋„ ์•Š์€ ์ฝ”๋“œ๋ผ ๋งˆ์Œ์—๋„ ์•ˆ๋“ค๊ณ  ๋‹น์—ฐํžˆ ์ด๊ฑฐ๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„๊ฒƒ์ด๋‹ค...

 

์นœ๊ตฌ์˜ ์นœ๊ตฌ๋“ค๊นŒ์ง€๋งŒ ๊ฒฐํ˜ผ์‹์— ์ดˆ๋Œ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ๋ž˜ํ”„์—์„œ 1 ๊ธฐ์ค€์œผ๋กœ ๊นŠ์ด๊ฐ€ 2 ์ด์ƒ ๋˜๋Š” ์นœ๊ตฌ๋“ค๋ถ€ํ„ฐ๋Š” ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ 1์—์„œ๋ถ€ํ„ฐ์˜ ๊นŠ์ด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด ๊นŠ์ด๊ฐ€ 3 ์ด์ƒ์ด ๋˜์—ˆ์„ ๊ฒฝ์šฐ ํƒ์ƒ‰์„ ๋ฉˆ์ถ”๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ์„ผ ์นœ๊ตฌ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅ์‹œํ‚จ๋‹ค.

 

์ฒ˜์Œ์— ๊นŠ์ด ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด์„œ DFS๋กœ ํ’€์—ˆ๋Š”๋ฐ ๊ทธ๋Ÿฌ๋ฉด ๊ฑธ๋ฆฌ๋Š” ์˜ˆ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋”๋ผ...

 

์ฝ”๋“œ
#include <cstdio>
#include <queue>
#define MAX 501

using namespace std;

int friends[MAX][MAX] = { 0 };
bool visited[MAX] = { false };
int depth[MAX] = { 0 };

int count = 0;
int n, m;
void BFS(int num);

int main(void) {
    scanf("%d %d", &n, &m);

    for(int i = 0; i < m; i++) {
        int a, b;
        scanf("%d %d", &a, &b);
        friends[a][b] = friends[b][a] = 1;
    }

    BFS(1);
    printf("%d\n", count);
    return 0;
}

void BFS(int num) {
    queue<int> q;
    q.push(num);
    visited[num] = true;

    while(!q.empty()) {
        int vertex = q.front();
        q.pop();
        
        for(int i = 1; i <= n; i++) {
            if(visited[i] || friends[vertex][i] == 0)
                continue;
            q.push(i);
            visited[i] = true;
            depth[i] = depth[vertex] + 1;
            if(depth[i] > 2) return;

            count++;
        }
    }
}
Comments