//搜索--简单dfs/bfs
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
char map[110][110];
int visited[110][110],n,m;
int x[]={-1,1,0,0,-1,1,-1,1},y[]={0,0,-1,1,-1,-1,1,1};
void dfs(int i,int j)
{
int k=0,x1,y1;
for(k=0;k<8;k++)
{
x1=i;y1=j;
x1=x1+x[k];y1=y1+y[k];
if(x1>=0&&y1>=0&&x1<m&&y1<n&&map[x1][y1]=='@'&&!visited[x1][y1])
{
visited[x1][y1]=1;
dfs(x1,y1);
}
}
}
typedef struct
{
int x,y;
}Q;
void bfs(int i,int j)
{
Q q[1000];int front=-1,rear=-1;
int k,x1,x2,y1,y2;
q[++rear].x=i;
q[rear].y=j;
while(front!=rear)
{
x1=q[++front].x;
y1=q[front].y;
for(k=0;k<8;k++)
{
x2=x1+x[k];y2=y1+y[k];
if(x2>=0&&x2<m&&y2>=0&&y2<n&&map[x2][y2]=='@'&&!visited[x2][y2])
{
q[++rear].x=x2;
q[rear].y=y2;
visited[x2][y2]=1;
}
}
}
}
int main()
{
int k,cnt,i,j;
while(scanf("%d %d",&m,&n)!=EOF&&m)
{
cnt=0;
memset(visited,0,sizeof(visited));
for(i=0;i<m;i++)
scanf("%s",map[i]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(map[i][j]=='@'&&!visited[i][j])
{
cnt++;
bfs(i,j);
}
}
printf("%d\n",cnt);
}
return 0;
}
uva --572
最新推荐文章于 2022-08-06 20:30:21 发布