백준공부/java
[백준] 4963번 섬의 개수 문제! (silver 2
gomduri43
2023. 6. 4. 20:29
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
while(true){
st=new StringTokenizer(br.readLine());
int w=Integer.parseInt(st.nextToken());
int h=Integer.parseInt(st.nextToken());
if(w==0 && h==0){
break;
}
boolean[][] visit=new boolean[h+1][w+1];
for(int i=1; i<=h; i++){
st=new StringTokenizer(br.readLine());
for(int j=1; j<=w; j++) {
if (st.nextToken().equals("1")) {
visit [i][j]=true;
}
}
}
int answer=0;
for(int i=1; i<=h; i++){
for(int j=1; j<=w; j++){
if(visit[i][j]){
dfs(visit,w,h,j,i);
answer++;
}
}
}
System.out.println(answer);
}
}
public static void dfs(boolean[][] visit, int w, int h, int x,int y){
if(!visit[y][x]){
return;
}
visit[y][x]=false;
if(1<x){
dfs(visit, w,h,x-1,y);
if(y>1){
dfs(visit, w,h,x-1,y-1);
}
if(y<h){
dfs(visit, w,h,x-1,y+1);
}
}
if(x<w){
dfs(visit,w,h,x+1,y);
if(y>1){
dfs(visit, w,h,x+1,y-1);
}
if(y<h){
dfs(visit, w,h,x+1,y+1);
}
}
if(1<y){
dfs(visit,w,h,x,y-1);
}
if(y<h){
dfs(visit,w,h,x,y+1);
}
return;
}
}