#include"stdio.h"
#include"queue"
#include"iostream"
#include"cstring"
using namespace std;
const int maxn=30;
int visit[maxn][maxn];
char g[maxn][maxn];
int r,c;
struct point{
int x;int y;
point(){}
point(int xx,int yy){x=xx;y=yy;}}start;
int ans;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
bool check(int x,int y)
{
return x>=0&&x<r&&y>=0&&y<c&&g[x][y]=='.'&&!visit[x][y];
}
void bfs()
{
queue<point>Q;
Q.push(start);
visit[start.x][start.y]=1;
++ans;
while(!Q.empty())
{
point u=Q.front();Q.pop();
for(int i=0;i<4;i++)
{
point v(u.x+dir[i][0],u.y+dir[i][1]);
if(check(v.x,v.y))
{
visit[v.x][v.y]=1;
++ans;
Q.push(v);
}
}
}
}
int main()
{
//freopen("a.txt","r",stdin);
while(scanf("%d%d",&c,&r),r+c)
{
memset(visit,0,sizeof(visit));
int i,j;
getchar();
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
g[i][j]=getchar();
if(g[i][j]=='@')
{start.x=i;start.y=j;}
}
getchar();
}
ans=0;
bfs();
cout<<ans<<endl;
}
}
POJ 1979 BFS
最新推荐文章于 2019-07-20 13:58:11 发布