#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int N=110;
char map[N][N];
int d[N][N],vis[N][N];
int n,m,e;
int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};
bool check(int x, int y){
if(x>=1 && x<=n && y>=1 && y<=m)
return 1;
return 0;
}
void dfs(int x, int y)
{
int px,py,i,flag;
flag=0; vis[x][y]=1;
for(i=0;i<8;i++)
{
px=x+dir[i][0]; py=y+dir[i][1];
if( check(px,py) && map[px][py]=='@' ){
if( d[x][y] )
d[px][py]=d[x][y];
else
d[x][y]=d[px][py]=++e;
if( !vis[px][py] )
{
vis[px][py]=1;
dfs(px,py);
}
}
else flag++;
vis[px][py]=1;
}
if(flag==8) map[x][y]=++e;
}
int main()
{
// freopen("cin","r",stdin);
// freopen("cout","w",stdout);
int i,r;
while(scanf("%d%d",&n,&m) && n+m)
{
for(i=1;i<=n;i++){
scanf("%s",map[i]);
for(r=m;r>=1;r--)
map[i][r]=map[i][r-1];
}
memset(d,0,sizeof(d));
memset(vis,0,sizeof(vis));
e=0;
for(i=1;i<=n;i++)
for(r=1;r<=m;r++)
if(map[i][r]=='@' && !vis[i][r]) dfs(i,r);
printf("%d\n",e);
}
return 0;
}
poj 1562
最新推荐文章于 2019-09-22 21:09:50 发布