题目描述
blablabla
调试的时候发现多组数据的情况下
经常忘记memset st
必须要全部清零
样例
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define x first
#define y second
typedef pair<int,int>PII;
PII start;
const int N=110;
char g[N][N];
bool st[N][N];
int t;
int n;//n个操作
int R,C;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void bfs(PII start)
{
queue<PII> q;
q.push(start);
st[start.x][start.y]=true;
while(q.size())
{
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>=R ||b<0 ||b>=C) continue;
if(st[a][b]) continue;
if(g[a][b]=='0') continue;
st[a][b]=true;
q.push({a,b});
}
}
}
int main()
{
scanf("%d",&t);
for(int cnt=1;cnt<=t;cnt++)
{
cin>>R>>C;
for(int i=0;i<R;i++)
scanf("%s",g[i]);
cin>>n;
printf("Case #%d:\n",cnt);
while(n--)
{
memset(st,0,sizeof st);
char c;
cin>>c;
if(c=='Q')
{
int ans=0;
for(int i=0;i<R;i++)
for(int j=0;j<C;j++)
{
// cout<<"hello"<<endl;
if(st[i][j]==0 && g[i][j]=='1')
{
start.x=i,start.y=j;
bfs(start);
ans++;
}
}
cout<<ans<<endl;
}
else if(c=='M')
{
int xx,yy;
char bbb;
cin>>xx>>yy>>bbb;
g[xx][yy]=bbb;
}
}
}
return 0;
}