알고리즘

[이코테/ DFS&BFS/ C++] 음료수 얼려 먹기

데메즈 2022. 12. 28. 21:07
728x90
반응형

https://www.youtube.com/watch?v=7C9RgOcvkvo&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3 

#include <bits/stdc++.h>

using namespace std;

int n, m;
int graph[1001][1001];

bool dfs(int x, int y){
    // 주어진 범위를 벗어나는 경우 즉시 종료
    if(x<=-1 || x>=n || y<=-1 || y>=m){
        return false;
    }
    // 현재 노드를 아직 방문하지 않았다면
    if(graph[x][y] == 0){
        // 해당 노드 방문 처리
        graph[x][y] = 1;
        // 상하좌우 위치들도 모두 재귀적으로 호출
        dfs(x-1, y);
        dfs(x, y-1);
        dfs(x+1, y);
        dfs(x, y+1);
        return true;
    }
    return false;
}

int main(void) {
    cin >> n >> m;

    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%1d",&graph[i][j]);
        }
    }
    // 모든 노드에 대하여 음료수 채우기
    int result = 0;
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            // 현재 위치에서 dfs 수행
            if(dfs(i,j)){
                result++;
            }
        }
    }
    cout << result << endl;

    return 0;
}
728x90
반응형