AcWing 643. 动态网格
原题链接
简单
作者:
大笔筒
,
2022-03-13 15:25:20
,
所有人可见
,
阅读 354
#include<iostream>
#include<cstring>
#include <queue>
#define x first
#define y second
using namespace std;
typedef pair<int,int> PII;
const int N=110;
int T;
int n,m;
char g[N][N];
bool st[N][N];
void bfs(int bx,int by)
{
queue<PII> Q;
Q.push({bx,by});
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
st[bx][by]=true;
while(!Q.empty())
{
PII t=Q.front();Q.pop();
for(int i=0;i<4;i++)
{
int a=t.x+dx[i],b=t.y+dy[i];
if(a>0&&a<=n&&b>=0&&b<m&&st[a][b]==false&&g[a][b]=='1')
{
st[a][b]=true;
Q.push({a,b});
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin>>T;
for(int i=1;i<=T;i++)
{
cin>>n>>m;
for(int d=1;d<=n;d++) cin>>g[d];
int K;cin>>K;
cout<<"Case #"<<i<<":"<<endl;
while(K--)
{
char s;cin>>s;
if(s=='M')
{
memset(st,false,sizeof st);
int a,b,c;cin>>a>>b>>c;
a++;
if(c==1) g[a][b]='1';
else g[a][b]='0';
}
else
{
int res=0;
for(int d=1;d<=n;d++)
{
for(int j=1;j<=m;j++)
{
if(st[d][j]==false &&g[d][j]=='1')
{
bfs(d,j);
res++;
}
}
}
cout<<res<<endl;
}
}
}
return 0;
}
memset(st,false,sizeof st);
这个初始化应该放在’Q’这种情况下