https://www.acmicpc.net/problem/4963
#include<stdio.h>
#include<stdbool.h>
static int arr[51][51];
static bool check[51][51];
static int dx[]={0,0,1,-1,1,1,-1,-1};
static int dy[]={1,-1,0,0,1,-1,-1,1};
static int w;
static int h;
static void find(int i,int j){
check[i][j]=true;
for(int k=0;k<8;k++){
int x=i+dx[k];
int y=j+dy[k];
if(x>=0 && x<h && y>=0 && y<w){
if(arr[x][y]==1 && check[x][y]==false){
find(x,y);
}
}
}
}
int main() {
while(true){
scanf("%d %d",&w,&h);
if(w==0 && h==0) break;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
scanf("%d",&arr[i][j]);
check[i][j]=false;
}
}
int count=0;
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
if(arr[i][j]==1 && check[i][j]==false){
find(i,j);
count++;
}
}
}
printf("%d\n",count);
}
}