[4963] 섬의 개수
한줄 후기 : 제주도 가고 싶다.
#include <iostream>
#include <string.h>
using namespace std;
int land[51][51]={0};
int visit[51][51]={0};
int dx[8] = {-1,1,0,0,-1,1,-1,1};
int dy[8] = {0,0,-1,1,-1,-1,1,1};
int w,h, cnt=0;
void dfs(int x, int y){
visit[x][y] = 1;
for(int i=0; i<8; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx>=0 && nx<h && ny>=0 && ny<w){
if(!visit[nx][ny] && land[nx][ny]==1){
dfs(nx,ny);
}
}
}
}
int main(){
do{
scanf("%d %d", &w, &h);
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
scanf("%d", &land[i][j]);
}
}
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
if(!visit[i][j] && land[i][j]==1){
dfs(i,j);
cnt++;
}
}
}
if(w!=0 || h!=0) printf("%d\n", cnt);
memset(visit,0,sizeof(visit));
memset(land,0,sizeof(land));
cnt=0;
}while(w!=0 || h!=0);
return 0;
}
dfs 돌면서 섬의 개수 체크해 주면 된다. 이때, 대각선도 이동 가능하니까 dx, dy 배열의 방향을 8개로 해줘야한다.
딱히 크게 어려운 점은 없었음.
'DEV > PS' 카테고리의 다른 글
[9372] 상근이의 여행, c++ (0) | 2021.02.07 |
---|---|
[1012] 유기농 배추, c++ (0) | 2021.02.07 |
[1946] 신입 사원, c++ (0) | 2021.02.06 |
[1040] 기타줄, c++ (0) | 2021.02.06 |
[2217] 로프, c++ (0) | 2021.02.06 |