首页 > 其他 > 详细

细胞的数量

时间:2020-02-24 15:50:36      阅读:62      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!