λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 14716번 - ν˜„μˆ˜λ§‰

by dkswnkk 2021. 11. 11.

문제

 

14716번: ν˜„μˆ˜λ§‰

ν˜μ§„μ΄μ˜ μƒκ°λŒ€λ‘œ ν”„λ‘œκ·Έλž¨μ„ κ΅¬ν˜„ν–ˆμ„ λ•Œ, ν˜„μˆ˜λ§‰μ—μ„œ κΈ€μžμ˜ κ°œμˆ˜κ°€ λͺ‡ κ°œμΈμ§€ 좜λ ₯ν•˜μ—¬λΌ.

www.acmicpc.net

 

μ½”λ“œ

#include <iostream>
#include <queue>

using namespace std;


int M,N;
int map[251][251];
int visited[251][251];
int dx[8]={0,0,-1,1,-1,-1,1,1}; //상 ν•˜ 쒌 우 λŒ€κ°μ„ 
int dy[8]={-1,1,0,0,-1,1,-1,1};

int ans=0;

void bfs(int x,int y){
    ans++;
    queue<pair<int,int>>q;
    q.push({x,y});
    visited[x][y]=1;

    while(!q.empty()){
        int x=q.front().first;
        int y=q.front().second;
        q.pop();

        for(int i=0; i<8; i++){
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(nx>=0&&nx<M&&ny>=0&&ny<N){   //λ²”μœ„λ₯Ό λ„˜μ§€ μ•Šμ„λ•Œ
                if(map[nx][ny]==1&&!visited[nx][ny]){
                    visited[nx][ny]=1;
                    q.push({nx,ny});
                }
            }
        }
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    cin>>M>>N;

    for(int i=0; i<M; i++){
        for(int k=0; k<N; k++){
            cin>>map[i][k];
        }
    }
    for(int i=0; i<M; i++){
        for(int k=0; k<N; k++){
            if(map[i][k]==1&&!visited[i][k]) bfs(i,k);
        }
    }

    cout<<ans;
}

λŒ“κΈ€