错了#1和#11,求大佬指教,谢谢!
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1010][1010],x,y,sum=0;
char d;
void dfs(int x,int y){
if(a[x][y]==0 || a[x][y]==2) return;
else {
a[x][y]=2;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
void check(int c,int b,int x,int y){
for(int i=c;i<=x;i++){
for(int j=b;j<=y;j++){
if(a[i][j]==0){
cout<<"Bad placement.\n";
exit(0);
}
}
}
sum++;
}
int main(){
memset(a,0,sizeof(a));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>d;
if(d=='#') a[i][j]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1){
sum++;
dfs(i,j);
x=i;
y=j;
while(a[x+1][j]!=0) x++;
while(a[i][y+1]!=0) y++;
while(a[x][y+1]!=0) x++;
check(i,j,x,y);
x=i;
y=j;
}
}
}
cout<<"There are "<<sum/2<<" ships.\n";
return 0;
}