https://www.acmicpc.net/problem/4963
using System;
using System.Collections;
class Program
{
static int[,] arr;
static bool[,] check;
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);
}
}
}
static void Main() {
while(true){
string[] s=Console.ReadLine().Split(' ');
w=int.Parse(s[0]);
h=int.Parse(s[1]);
if(w==0 && h==0) break;
arr=new int[h,w];
for(int i=0;i<h;i++){
string[] s1=Console.ReadLine().Split(' ');
for(int j=0;j<w;j++){
arr[i,j]=int.Parse(s1[j]);
}
}
check=new bool[h,w];
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++;
}
}
}
Console.WriteLine(count);
}
}
}