본문 바로가기
개발자/알고리즘

[BOJ] 4963번 섬의 개수

by D , 2019. 9. 22.
반응형


#include < iostream>
#include < queue>
#include < vector>
#include < cstring>


using namespace std;

int dy[8] = {-1,-1,-1,0,0,1,1,1};
int dx[8] = {-1,0,1,-1,1,-1,0,1};

int board[50][50];
bool check[50][50];

//w너비,h높이
int w,h;

void bfs(int y,int x){
    queue<pair<int,int>> q;
    check[y][x] = true;
    q.push(make_pair(y,x));

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

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

            if(ny<0 || nx<0 || ny>=h || nx>=w)
                continue;

            if(check[ny][nx] == false && board[ny][nx] == 1){
                check[ny][nx] = true;
                q.push(make_pair(ny,nx));
            }
        }
    }

}

int main()
{


    while(1){
        cin>>w>>h;
        if(w==0 && h==0)
            break;

        //2차원 배열 board,check 초기화
        memset(board,0,sizeof(board));
        memset(check,false,sizeof(check));

        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                cin>>board[i][j];
            }
        }

        //입력 확인
        /*for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                cout<<board[i][j]<<" ";
            }
            cout<<endl;
        }*/
        int count=0;
        for(int i=0;i<h;i++){
            for(int j=0;j<w;j++){
                if(board[i][j] == 1 && check[i][j] == false){
                    bfs(i,j);
                    count++;
                }
            }
        }

        cout<<count<<endl;

    }

    return 0;
}

 

https://www.acmicpc.net/problem/4963

 

4963번: 섬의 개수

문제 정사각형으로 이루어져 있는 섬과 바다 지도가 주어진다. 섬의 개수를 세는 프로그램을 작성하시오. 한 정사각형과 가로, 세로 또는 대각선으로 연결되어 있는 사각형은 걸어갈 수 있는 사각형이다.  두 정사각형이 같은 섬에 있으려면, 한 정사각형에서 다른 정사각형으로 걸어서 갈 수 있는 경로가 있어야 한다. 지도는 바다로 둘러쌓여 있으며, 지도 밖으로 나갈 수 없다. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는

www.acmicpc.net

 

반응형

'개발자 > 알고리즘' 카테고리의 다른 글

[BOJ] 1697번 숨바꼭질  (0) 2019.10.07
[BOJ] 2178번 미로탐색  (0) 2019.09.23
[BOJ] 2667번 단지번호붙이기  (0) 2019.09.22
[BOJ] 11724번 연결 요소의 개수  (0) 2019.09.21
[BOJ] 1260번 BFS와 DFS  (0) 2019.09.21