a = new int[n][m+1]; 인데,
for(int i = 0; i < m ; i ++){
for(int j = 0 ; j < n ; j++){
a[i][j] = sc.nextInt();
}
}
는 a[m - 1][n - 1]까지 갑니다. m이 n보다 크다면 문제가 됩니다.
4963번 - 섬의 개수
와 이거 어떻게 찾으셨나요 저는 몇시간 걸렸는데도 못찾았어요 ...
에러났을때 해결방법조언좀 듣고싶습니다
댓글을 작성하려면 로그인해야 합니다.
monsterfairy2 5년 전
import java.util.*;
class Main{
static int[][] a;
public static void dfs(int[][] a, int i, int j,int count){
if(a[i][j]==0){
return ;
}
int[] x = {-1,1,0,0,-1,-1,1,1};
int[] y = {0,0,-1,1,1,-1,1,-1};
a[i][j]=0;
for(int k = 0; k < 8 ; k++){
if(i+x[k]>=0 &&i+x[k]<a.length&& j+y[k]>=0&&j+y[k]<a[0].length &&a[i+x[k]][j+y[k]]!=0){
dfs(a, i+x[k],j+y[k],count);
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n=1;
int m=1;
while(n!=0&&m!=0){
n = sc.nextInt();
m = sc.nextInt();
if(n==0&&m==0){
return;
}
a = new int[n][m+1];
for(int i = 0; i < m ; i ++){
for(int j = 0 ; j < n ; j++){
a[i][j] = sc.nextInt();
}
}
int count=1;
for(int i = 0 ; i<m; i++){
for(int j = 0 ; j < n ; j++){
if(a[i][j]!=0)
dfs(a ,i ,j ,count++);
}
}
/*
5 4
1 0 1 0 0
1 0 0 0 0
1 0 1 0 1
1 0 0 1 0
0 0
*/ System.out.println(count-1);
}
}
}