AcWing 643. 动态网格
原题链接
简单
作者:
l_y_f
,
2022-02-28 20:41:15
,
所有人可见
,
阅读 199
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N = 105;
char g[N][N];
bool vis[N][N];
int n, m, k;
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
int main()
{
int T;
cin >> T;
for(int i = 1; i <= T; i++)
{
cout << "Case #" << i << ":" << "\n";
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> g[i];
cin >> k;
while(k--)
{
char op; cin >> op;
if(op == 'Q')
{
memset(vis, 0, sizeof vis);
function<void(int,int)> dfs = [&](int x, int y) {
vis[x][y] = true;
for(int i = 0; i < 4; i++)
{
int a = x + dx[i], b = y + dy[i];
if(a < 0 || a >= n || b < 0 || b >= m || g[a][b] == '0' || vis[a][b])
continue;
dfs(a, b);
}
};
int cnt = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
if(!vis[i][j] && g[i][j] == '1')
{
dfs(i, j);
cnt++;
}
cout << cnt << "\n";
}
else
{
int aa, bb; char cc;
cin >> aa >> bb >> cc;
g[aa][bb] = cc;
}
}
}
}