求大佬帮忙改正
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e4+1;
bool st[N][N];
ll f[N][N];
ll cnt;
int ans=0;
ll n,m;
bool flag=true;
char a;
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};
inline void check(int x,int y)
{
if(f[x][y]==1)ans++;
if(f[x+1][y]==1)ans++;
if(f[x][y+1]==1)ans++;
if(f[x+1][y+1]==1)ans++;
if(ans-3==0)
{
flag=false;
}
return ;
}
void dfs(int x,int y)
{
for(int i=0;i<4;i++)
{
int ex=x+dx[i];
int ey=y+dy[i];
if(!st[ex][ey]&&f[ex][ey]==1)
{
st[ex][ey]=1;
f[ex][ey]=0;
dfs(ex,ey);
}
}
}
int main()
{
cin>>n>>m;
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
cin>>a;
if(a=='#')
{
f[i][j]=1;
}
}
}
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
check(i,j);
if(f[i][j]==1)
{
dfs(i,j);
cnt++;
}
}
}
if(flag)
printf("There are %d ships.",cnt);
else
cout<<"Bad placement.";
return 0;
}