Oil Deposits
Problem Description
Input
Output
Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0
Sample Output
0 1 2 2
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
struct lmx{
int x;
int y;
};
struct lmx lm[15000];
int flag[101][101];
int m,n,cnt;
char ss[101][101];
int c[8]={-1,0,1,1,1,0,-1,-1};
int d[8]={-1,-1,-1,0,1,1,1,0};
bool isarea(int x,int y)
{
return (x>=0&&x<m&&y>=0&&y<n);
}
void bfs(int x,int y)
{
int i,head=0,rear=0;
lmx l;
l.x=x;
l.y=y;
lm[rear++]=l;
while(head<rear)
{
lmx sm=lm[head];
for(i=0;i<8;i++)
{
int xx=sm.x+c[i];
int yy=sm.y+d[i];
if(isarea(xx,yy)&&flag[xx][yy]==0)
{
lm[rear].x=xx;
lm[rear].y=yy;
rear++;
flag[xx][yy]=1;
}
}
head++;
}
}
int main()
{
int i,j;
while(cin>>m>>n&&m+n)
{
cnt=0;
memset(flag,0,sizeof(flag));
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>ss[i][j];
if(ss[i][j]=='*') flag[i][j]=1;
}
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(flag[i][j]==0) {bfs(i,j);cnt++;}
}
}
cout<<cnt<<endl;
}
return 0;
}