洛谷链接:https://www.luogu.com.cn/problem/P1596
import java.util.Scanner;
public class Main {
static int n=0,m=0,ans=0;
static int[][] a=new int[1000][1000];
static int[] dx={-1,1,0,0,-1,-1,1,1};
static int[] dy={0,0,-1,1,-1,1,-1,1};
public static void dfs(int x,int y) {
a[x][y]=0; //已经走过
for(int i=0;i<8;i++) {
int nx=x+dx[i];
int ny=y+dy[i];
if(a[nx][ny]==0 || nx<1 || nx>n || ny<1 || ny>m ) continue; //返回走下一个方向
dfs(nx,ny); //走
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
for(int i=1;i<=n;i++) {
String s=in.next();
for(int j=1;j<=m;j++) {
char c=s.charAt(j-1);
if(c=='W') {
a[i][j]=1;
}else {
a[i][j]=0;
}
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(a[i][j]==1) {
//如果该点是水
dfs(i,j);
ans++;
}
}
}
System.out.println(ans);
}
}