10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.输出 3
就是统计有几个连通块的题目,打卡一下。
import java.util.Scanner;
public class Main {
static int N=110;
static char[][]g=new char[N][N];
static boolean[][]st=new boolean[N][N];
static int m,n;
static int[]dx= {1,1,1,0,0,-1,-1,-1};
static int[]dy= {-1,0,1,1,-1,1,0,-1};
static int res=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
for(int i=0;i<n;i++) {
String str=sc.next();
for(int j=0;j<m;j++) {
g[i][j]=str.charAt(j);
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(g[i][j]=='W'&&!st[i][j]) {
res++;
dfs(i,j);
}
}
}
System.out.println(res);
}
public static void dfs(int a,int b) {
st[a][b]=true;
for(int i=0;i<8;i++) {
int x=a+dx[i];
int y=b+dy[i];
if(x<0||x>=n||y<0||y>=m||st[x][y]||g[x][y]=='.')continue;
st[x][y]=true;
dfs(x,y);
}
}
}