代码:
#include <iostream>
#include <queue>
using namespace std;
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
struct Point
{
int x, y;
void point(int x_, int y_)
{
x = x_;
y = y_;
}
};
int n, m;
char mp[505][505];
bool visit[505][505];
Point tmp;
void bfs(int x, int y);
int main(int argc, char **argv)
{
memset(mp, '0', sizeof(mp));
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
cin >> mp[i][j];
if(mp[i][j] == '*')
{
visit[i][j] = 1;
}
}
}
bfs(0, 0);
int ans = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(!visit[i][j]) ans++;
}
}
cout << ans << endl;
return 0;
}
void bfs(int x, int y)
{
queue<Point> poq;
for(int i = 0; i <= n + 1; i++)
{
tmp.point(i, 0);
poq.push(tmp);
tmp.point(i, m + 1);
poq.push(tmp);
}
for(int j = 0; j <= m + 1; j++)
{
tmp.point(0, j);
poq.push(tmp);
tmp.point(n + 1, j);
poq.push(tmp);
}
while(!poq.empty())
{
tmp = poq.front();
poq.pop();
for(int i = 0; i < 4; i++)
{
int nx = tmp.x + dx[i];
int ny = tmp.y + dy[i];
if(nx > n || nx < 1 || ny > m || ny < 1) continue;
if(visit[nx][ny]) continue;
cout << "Goto x = " << nx << ", y = " << ny << "Value = " << mp[nx][ny] << endl;
visit[nx][ny] = 1;
tmp.point(nx, ny);
poq.push(tmp);
}
}
}