๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1012๋ฒˆ - ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

by ์•ˆ์ฃผํ˜• 2021. 10. 16.
 

1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

www.acmicpc.net

 

//  Copyright © 2021 ์•ˆ์ฃผํ˜•. All rights reserved.
//  https://www.acmicpc.net/problem/1012
//  BOJ1012 ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int M, N, K;  //M:๊ฐ€๋กœ๊ธธ์ด N:์„ธ๋กœ๊ธธ์ด K: ๋ฐฐ์ถ” ๊ฐœ์ˆ˜
int map[51][51];
int visited[51][51];
int dy[4] = { -1,1,0,0 };
int dx[4] = { 0,0,-1,1 };

void dfs(int x, int y) {
    visited[x][y] = 1;

    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i];
        int ny = y + dy[i];

        if (0<=nx&&nx<N&&0<=ny&&ny<M) {
            if (map[nx][ny] && !visited[nx][ny]) { //๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๊ณ , ์ง€๋ ์ด๊ฐ€ ์žˆ์„๋•Œ
                visited[nx][ny] = 1;
                dfs(nx, ny);
            }
        }
    }
}
void reset() {
    for (int i = 0; i < N; i++) {
        for (int k = 0; k < M; k++) {
            map [i][k] = 0;
            visited[i][k] = 0;
        }
    }

}

int main() {
    int T, a, b;
    cin >> T;
    while (T--) {
        int cnt = 0;
        reset();
        cin >> M >> N >> K;
        for (int i = 0; i < K; i++) {
            cin >> a >> b;
            map[b][a] = 1; //๋ฐฐ์ถ” ์œ„์น˜ ์ž…๋ ฅ
        }
        for (int i = 0; i < N; i++) { //์ง€๋ ์ด ํƒ์ƒ‰
            for (int k = 0; k < M; k++) {
                if (map[i][k] && !visited[i][k]) { // ์ง€๋ ์ด๊ฐ€ ์žˆ๊ณ , ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜์„๋•Œ
                    dfs(i, k);
                    cnt++;
                }
            }

        }
            cout << cnt << "\n";
    }
}

๋Œ“๊ธ€