考点:bfs模板题
注:题目的格子是从坐标1,1开始的。我们初始化的时候也从坐标1,1开始,这样绝对不会错。
#include <iostream>
#include <queue>
using namespace std;
const int N = 110;
int g[N][N];
vector<pair<int, int>> v;
int n, m;
int num;//数量
int t;
int dir[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
int ans;
void bfs()
{
queue<pair<int, int>> q;
for(int i = 0; i < v.size(); i++) q.push({v[i]});
while(t --)
{
int sz = q.size();
for(int i = 0; i < sz; i++)
{
pair<int, int> front = q.front();
q.pop();
int x = front.first, y = front.second;
for(int i = 0; i < 4; i++)
{
int newx = x + dir[i][0], newy = y + dir[i][1];
if(g[newx][newy] == 0 && newx >= 1 && newx <= n && newy >= 1 && newy <= m)
{
ans++;
g[newx][newy] = 1;
q.push({newx, newy});
}
}
}
}
}
int main()
{
cin >> n >> m >> num;
while(num --)
{
int x, y;
cin >> x >> y;
v.push_back({x, y});
g[x][y] = 1;
ans++;
}
cin >> t;
bfs();
cout << ans;
}