洛谷链接:https://www.luogu.com.cn/problem/P1451
import java.util.Scanner;
public class Main {
static int n=0,m=0,ans=0;
static int[][] a=new int[105][105];
static boolean[][] used=new boolean[105][105]; //标记是否走过,保持原数组不变
static int[] dx={-1,1,0,0};
static int[] dy={0,0,-1,1};
public static void dfs(int x,int y) {
used[x][y]=true; //已经走过
for(int i=0;i<4;i++) {
int nx=x+dx[i];
int ny=y+dy[i];
if(a[nx][ny]==0 || used[nx][ny]==true) 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);
a[i][j]=c-'0';
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
if(used[i][j]==false && a[i][j]!=0) {
//如果该点没走过 并且 该点不是0(属于细胞数字)
dfs(i,j);
ans++;
}
}
}
System.out.println(ans);
}
}