알고리즘 문제풀이
Q4963 섬의 개수 JAVA
JihyunLee
2019. 5. 7. 15:56
반응형
package graph;
import java.util.*;
public class Q4963 {
//섬의 갯수를 세는 문제
static int[] di = {-1,0,1,-1,1,-1,0,1};
static int[] dj = {-1,-1,-1,0,0,1,1,1};
static int arr[][];
static int visit[][];
static int w,h;
public static void main(String[] args) {
// TODO Auto-generated method stub
int cnt=0;
Scanner scan = new Scanner(System.in);
StringTokenizer st;
while(true) {
cnt=0;
String s = scan.nextLine();
st = new StringTokenizer(s," ");
w = Integer.parseInt(st.nextToken());
h = Integer.parseInt(st.nextToken());
if(w==0 && h==0) break;
arr = new int[h][w];
visit = new int[h][w];
for(int i=0; i<h; i++) {
s = scan.nextLine();
st = new StringTokenizer(s," ");
for(int j=0; j<w; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
//입력완료
for(int i=0; i<h; i++) {
for (int j=0; j<w; j++) {
if(arr[i][j]==1 && visit[i][j]==0) {
find(i,j);
cnt++;
}
}
}
System.out.println(cnt);
}
}
public static void find(int i, int j) {
visit[i][j] = 1;
for(int k=0; k<8; k++) {
int ni = i + di[k];
int nj = j + dj[k];
if(ni>=0 && nj>=0 && ni<h && nj<w) {
if(arr[ni][nj]==1 && visit[ni][nj]==0) {
find(ni,nj);
}
}
}
}
}
반응형