//
// Created by luozujian on 17-10-21.
//
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 21;
char mp[maxn][maxn];
bool vis[maxn][maxn];
int W,H;
int to[4][2] = {1,0,-1,0,0,-1,0,1};
struct node{
int x,y;
};
queue<node>que;
void bfs(int x,int y)
{
node p;
p.x = x;
p.y = y;
vis[x][y] = true;
que.push(p);
int res = 1;
while(que.size())
{
node b = que.front();que.pop();
for(int i=0;i<4;i++)
{
int fx = b.x + to[i][0];
int fy = b.y + to[i][1];
if( !vis[fx][fy] && fx>=0 && fx<H && fy >=0 && fy < W && mp[fx][fy] != '#')
{
res ++;
vis[fx][fy] = true;
node b;
b.x = fx;
b.y = fy;
que.push(b);
}
}
}
printf("%d\n",res);
}
void solve()
{
memset(vis,false,sizeof(vis));
for(int i=0;i<H;i++)
{
for(int j=0;j<W;j++)
{
if(mp[i][j] == '@')
{
bfs(i,j);
break;
}
}
}
}
int main()
{
while(~scanf("%d%d",&W,&H)&&(W+H))
{
for(int i=0;i<H;i++)scanf("%s",mp[i]);
solve();
}
return 0;
}
BFS入门模板
最新推荐文章于 2024-04-23 11:00:34 发布