细胞的数量

一矩形阵列由数字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);
        }
        
        
    }
}

 

posted @ 2020-02-24 15:33  智阿广  阅读(396)  评论(0)    收藏  举报