#include<bits/stdc++.h>
using namespace std;
long long int mx,mn,num;
char s[1000][1000];
bool o[1000][1000]={{0}};
int a,b;
long long int z;
void f(int x,int y){
if(o[x][y]==1){
return;
}
z++;
o[x][y]=1;
if(o[x+1][y]==0&&s[x+1][y]=='W'&&x<a-1)f(x+1,y);
if(o[x-1][y]==0&&s[x-1][y]=='W'&&x>0)f(x-1,y);
if(o[x][y-1]==0&&s[x][y-1]=='W'&&y>0)f(x,y-1);
if(o[x][y+1]==0&&s[x][y+1]=='W'&&y<b-1)f(x,y+1);
else return;
//o[x][y]=0;
}
int main(){
cin>>a>>b;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
cin>>s[i][j];
}
}
mx=0;
mn=1000;
num=0;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(s[i][j]=='W'&&o[i][j]==0){
z=0;
f(i,j);
num++;
mx=max(mx,z);
mn=min(mn,z);
}
}
}
cout<<mx<<" "<<mn<<" "<<num<<endl;
}
mn 有可能沒變動。
我的做法和他相同,但是我的最小值初始為2147483647也是卡第三測資點@@
#include<bits/stdc++.h>
using namespace std;
long long int mx,mn,num;
char s[1000][1000];
bool o[1000][1000]={{0}};
int a,b;
long long int z;
void f(int x,int y){
if(o[x][y]==1){
return;
}
z++;
o[x][y]=1;
if(o[x+1][y]==0&&s[x+1][y]=='W'&&x<a-1)f(x+1,y);
if(o[x-1][y]==0&&s[x-1][y]=='W'&&x>0)f(x-1,y);
if(o[x][y-1]==0&&s[x][y-1]=='W'&&y>0)f(x,y-1);
if(o[x][y+1]==0&&s[x][y+1]=='W'&&y<b-1)f(x,y+1);
else return;
//o[x][y]=0;
}
int main(){
cin>>a>>b;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
cin>>s[i][j];
}
}
mx=0;
mn=1000;
num=0;
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
if(s[i][j]=='W'&&o[i][j]==0){
z=0;
f(i,j);
num++;
mx=max(mx,z);
mn=min(mn,z);
}
}
}
cout<<mx<<" "<<mn<<" "<<num<<endl;
}
測資三沒水漥