解決
実際には、この問題は非常に暴力的である
キーは、各正方形の処理のためである(まだの処理要件に比較的薄い
ので、検討する必要がなく、いくつかの変形があり、左上から右下へ:私たちは明確な検索を持っているためにまず
限り、我々はすべての創設者をチェックするように、ライン上で完全ではありません
時間の最大ノードを更新
#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 2147483647
int R,C,Ans,s,ex,ey;
char a[1010][1010];
int u[]={1,-1,0,0};
int v[]={0,0,1,-1};
void dfs(int x,int y){
for(int i=0;i<4;i++){
int xx=x+u[i],yy=y+v[i];
if(xx>0&&xx<=R&&yy>0&&yy<=C&&a[xx][yy]=='#'){
s++;
if(xx>ex||yy>ey)ex=xx,ey=yy;
a[xx][yy]='.';
dfs(xx,yy);
}
}
}
int main(){
cin>>R>>C;
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
cin>>a[i][j];
for(int i=1;i<=R;i++)
for(int j=1;j<=C;j++)
if(a[i][j]=='#'){
s=1;
ex=i;
ey=j;
Ans++;
a[i][j]='.';
dfs(i,j);
if(((ex-i+1)*(ey-j+1))!=s){
cout<<"Bad placement."<<endl;
return 0;
}
}
printf("There are %d ships.\n",Ans);
return 0;
}