代码给你
```cpp
#include<bits/stdc++.h>
using namespace std;
char s[1005][1005];
bool vis[1005][1005];
int n,m;
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
void dfs(int x,int y){
vis[x][y] = 1;
for(int i = 0;i < 4;i++){
int nx = x + dx[i],ny = y+ dy[i];
if(nx < 1||nx > n||ny < 1||ny > m) continue;
if(vis[nx][ny] == 0&&s[nx][ny] == '#')
dfs(nx,ny);
}
return;
}
int check(int i, int j){
int cnt = 0;
if(s[i][j] == '#') cnt++;
if(s[i+1][j] == '#') cnt++;
if(s[i][j+1] == '#') cnt++;
if(s[i+1][j+1] == '#') cnt++;
return cnt;
}
int main(){
cin>>n>>m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin>>s[i][j];
bool flag = false;
for(int i = 1;i <= n - 1;i++)
for(int j = 1;j <= m - 1;j++)
if(check(i,j) == 3)
flag = true;
if(flag==true){
cout<<"Bad placement."<<endl;
return 0;
}
int ans = 0;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
if(s[i][j] == '#'&&vis[i][j] == 0){
ans++;dfs(i,j);
}
cout<<"There are "<<ans<<" ships."<<endl;
return 0;
```
by cjy2011 @ 2024-04-06 11:46:08