应该就是注释判断条件的问题,测试点还有RE
#include<bits/stdc++.h>
using namespace std;
char a[1005][1005];
int n,m,s,q[100005][2],xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};
void bfs(int cxk,int gg){
int f=0,r=1;
a[cxk][gg]='.';
q[r][0]=cxk;
q[r][1]=gg;
while(f<r){
f++;
for(int i=0;i<4;i++){
int x=q[f][0]+xx[i];
int y=q[f][1]+yy[i];
if(x>=1&&x<=n&&y<=m&&y>=1&&a[x][y]!='.'){
a[x][y]='.';
r++;
q[r][0]=x;
q[r][1]=y;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%1d",&a[i][j]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]!='.'){
// if((a[i][j+1]!='.'&&a[i][j-1]!='.')||(a[i][j+1]!='.'&&a[i-1][j]!='.')||(a[i][j+1]!='.'&&a[i+1][j]!='.')||(a[i][j-1]!='.'&&a[i-1][j]!='.')||(a[i][j-1]!='.'&&a[i+1][j]!='.')||(a[i+1][j]!='.'&&a[i-1][j]!='.')||(a[i][j+1]!='.'&&a[i][j-1]!='.'&&a[i-1][j]!='.'&&a[i+1][j]!='.')){
// cout<<"Bad placement.";//应该就是注释判断条件的问题
// return 0;
// }
bfs(i,j);
s++;
}
}
}
cout<<"There are "<<s<<" ships.";
return 0;
}