A了这道题
#include<bits/stdc++.h>
#include<iostream>
#include<queue>
#include<stack>
#include<stdio.h>
#include<math.h>
using namespace std;
int n;
int ans=0;
int ma[305][305];
int l[305];
const int dx[]={0,1,0,-1,0};
const int dy[]={0,0,-1,0,1};
string u;
queue<pair<int,int> > q;
void bfs(int xx,int yy){
q.push(make_pair(xx,yy));
ma[xx][yy]=0;
while(q.size()){
int xxx=q.front().first;
int yyy=q.front().second;
q.pop();
for(int i=1;i<=4;i++){
int s=xxx+dx[i];
int d=yyy+dy[i];
if(s>=1&&s<=n&&d>=1&&d<=l[s]&&ma[s][d]==1){
ma[s][d]=0;
q.push(make_pair(s,d));
}
}
}
}
signed main()
{
//freopen("P1767.in","r",stdin);
//freopen("P17671.out","w",stdout);
cin>>n;
getline(cin,u);
for(int i=1;i<=n;i++){
getline(cin,u);
l[i]=u.size();
for(int j=1;j<=l[i];j++){
if(u[j-1]>='a'&&u[j-1]<='z'){
ma[i][j]=1;
}
}
}
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=l[i];j++){
cout<<ma[i][j];
}
cout<<"\n";
}*/
for(int i=1;i<=n;i++){
for(int j=1;j<=l[i];j++){
if(ma[i][j]==1){
bfs(i,j);
ans++;
}
}
}
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<vis[i][j]<<' ';
}
cout<<"\n";
}*/
cout<<ans;
return 0;
}
/*
4
*zlw**pxh
l*zlwk*hx*
w*tyy**yyy
zzl
*/
上面这个代码可以AC,
但是若把第22行的q.pop();挪到第31行即:
void bfs(int xx,int yy){
q.push(make_pair(xx,yy));
ma[xx][yy]=0;
while(q.size()){
int xxx=q.front().first;
int yyy=q.front().second;
q.pop();//here
for(int i=1;i<=4;i++){
int s=xxx+dx[i];
int d=yyy+dy[i];
if(s>=1&&s<=n&&d>=1&&d<=l[s]&&ma[s][d]==1){
ma[s][d]=0;
q.push(make_pair(s,d));
}
}
}
}
变为
void bfs(int xx,int yy){
q.push(make_pair(xx,yy));
ma[xx][yy]=0;
while(q.size()){
int xxx=q.front().first;
int yyy=q.front().second;
for(int i=1;i<=4;i++){
int s=xxx+dx[i];
int d=yyy+dy[i];
if(s>=1&&s<=n&&d>=1&&d<=l[s]&&ma[s][d]==1){
ma[s][d]=0;
q.push(make_pair(s,d));
}
}
q.pop();//WA
}
}
就会MLE.
蒟蒻写BFS第一次见这种情况,求大佬解答