waNo.3,主要思路用的是dfs
#include<bits/stdc++.h>
using namespace std;
int r,c,ans=0;
char b;
int a[1005][1005];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
void dfs(int x,int y){
a[x][y]=0;
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx<1||nx>r||ny<1||ny>c||a[nx][ny]==0)continue;
dfs(nx,ny);
}
}
bool check(int x,int y){
int temp=0;
if(a[x][y]==1)temp++;
if(a[x+1][y]==1)temp++;
if(a[x][y+1]==1)temp++;
if(a[x+1][y+1]==1)temp++;
if(temp==3)return false;
else return true;
}
int main(){
cin>>r>>c;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>b;
if(b=='#')a[i][j]=1;
else a[i][j]=0;
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(check(i,j)==0){
cout<<"Bad placement.";
return 0;
}
}
}
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
if(a[i][j]==1){
a[i][j]=0;
ans++;
dfs(i,j);
}
}
}
if(ans==0)printf("Bad placement.");
else printf("There are %d ships.",ans);
return 0;
}