一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,
求给定矩形阵列的细胞个数。(1<=m,n<=100)
输入格式
输入:整数m,n(m行,n列)
矩阵
输出格式
输出:细胞的个数
样例输入
4 10
0234500067
1034560500
2045600671
0000000089
输出
4
import java.util.Scanner; public class 细胞 { /** * @param args */ static Scanner sc= new Scanner(System.in); static int n = sc.nextInt(); static int m = sc.nextInt(); static int [][] num = new int[n+2][m+2]; static boolean [][] b = new boolean[n+2][m+2]; //四个方向 static int []x ={0,1,0,-1}; static int []y ={1,0,-1,0}; static int sum = 0; public static void main(String[] args) { // TODO Auto-generated method stub for (int i = 1; i <=n; i++) { String s = sc.next().trim(); for (int j = 1; j <=m; j++) { num[i][j]=s.charAt(j-1)-‘0‘; } } for (int i = 1; i <=n; i++) { for (int j = 1; j <=m; j++) { if (!b[i][j]&&num[i][j]!=0) { f(i,j); sum++;//一个整细胞 就加累加1 } } } System.out.println(sum); } private static void f(int o ,int p ) { b[o][p]=true;//经过的点做标记 for (int i = 0; i < 4; i++) { //判断上下左右 是否是细胞 int i1 = o+x[i]; int j1 = p+y[i]; if (b[i1][j1]||num[i1][j1]==0) //已被标记 或者 不是细胞数 { continue;//结束本次循环 } f(i1,j1); } } }
原文:https://www.cnblogs.com/shiaguang/p/12357163.html