给你一张n*m的西湖地图二值图,其中西湖的轮廓用1表示,轮廓内核轮廓外均用0表示。
现在请你统计西湖的面积,即轮廓内0的个数。
解析:
#include
#include
#include
#include
using namespace std;
struct pos { int x, y; };
int bfs(vector
{
const int dir[4][2] = { { -1,0 },{ 1,0 },{ 0,-1 },{ 0,1 } };
int n = map.size(), m = map[0].size();
queue
pos start{ 0,0 };
que.push(start);
visit[start.x][start.y] = true;
while (!que.empty())
{
pos cur = que.front(), next;
que.pop();
for (int i = 0; i < 4; ++i)
{
next.x = cur.x + dir[i][0];
next.y = cur.y + dir[i][1];
if (next.x >= 0 && next.x < n && next.y >= 0 && next.y < m && \
!visit[next.x][next.y] && map[next.x][next.y] != '1')
{
que.push(next);
visit[next.x][next.y] = true;
}
}
}
int count = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
if (visit[i][j]) ++count;
int one = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
if (map[i][j] == '1') ++one;
return m * n - count - one;
}
int main()
{
int n, m;
while (cin >> n >> m)
{
vector
vector
mp[0] = string(m + 2, '0');
for (int i = 1; i <= n; ++i)
{
cin >> mp[i];
mp[i] = "0" + mp[i] + "0";
}
mp[n+1] = string(m + 2, '0');
cout << bfs(mp, visit) << endl;
}
return 0;
}