Algorithm/inflearn

섬나라 아일랜드(DFS)

마닐라 2021. 10. 5. 23:03

import java.util.*;

class Main {
    static int answer=0, n;
    static int[] dx={-1, -1, 0, 1, 1, 1, 0, -1};
    static int[] dy={0, 1, 1, 1, 0, -1, -1, -1};
    public void DFS(int x, int y, int[][] board){
        for(int i=0; i<8; i++){
            int nx=x+dx[i];
            int ny=y+dy[i];
            //solution에서 찾은 섬과 인접한 섬(1)이면 0으로 다 바꾼다.
            if(nx>=0 && nx<n && ny>=0 && ny<n && board[nx][ny]==1){
                board[nx][ny]=0;
                DFS(nx, ny, board);
            }
        }
    }
    public void solution(int[][] board){
        //board는 지도의 정보
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                //섬을 찾으면 해당 섬과 인접한 섬들을 찾아야한다.
                if(board[i][j]==1){
                    answer++;
                    //출발점을 0으로 바꿔놓는다.
                    board[i][j]=0;
                    DFS(i, j, board);
                }
            }
        }
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        //격자의 크기
        n=kb.nextInt();
        int[][] arr=new int[n][n];
        for(int i=0; i<n; i++){
            for(int j=0; j<n; j++){
                arr[i][j]=kb.nextInt();
            }
        }
        T.solution(arr);
        System.out.println(answer);
    }
}

 

'Algorithm > inflearn' 카테고리의 다른 글

피자 배달거리(DFS 활용)  (0) 2021.10.06
섬나라 아일랜드(BFS)  (0) 2021.10.05
토마토(BFS 활용)  (0) 2021.10.05
미로의 최단거리 통로(BFS)  (0) 2021.10.05
미로탐색(DFS)  (0) 2021.10.05