找细胞(题解)

题目描述

一矩形阵列由数字 00 到 99 组成,数字 11 到 99 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

输入格式

第一行两个整数代表矩阵大小 nn 和 mm。

接下来 nn 行,每行一个长度为 mm 的只含字符 0 到 9 的字符串,代表这个 n imes mn×m 的矩阵。

输出格式

一行一个整数代表细胞个数。

输入输出样例

输入 #1
4 10
0234500067
1034560500
2045600671
0000000089
输出 #1
4

说明/提示

数据规模与约定

对于 100\%100% 的数据,保证 1 le n,m le 1001n,m100。

#include <iostream>

#include <cstdio>

using namespace std;

void dfs(int x,int y);

int n,m;

char a[105][105];

int dx[4]={-1,0,1,0};//方向

int dy[4]={0,1,0,-1};//方向

int ans;

void dfs(int x,int y)

{

    if(a[x][y]-'0'==0) return;

    else{

        if(x>=0 && x<n && y>=0 && y<m)

        {

            a[x][y]='0';

            for(int i=0;i<4;i++)

                dfs(x+dx[i],y+dy[i]);

        }

    }

    return;//越界,则不满足,return。这和其他代码把越界结束的条件放在之前是一样的(放在之前这里就没有return了)

}

int main()

{

    scanf("%d%d",&n,&m);

    for(int i=0;i<n;i++)

    {

        cin>>a[i];

    }

    for(int i=0;i<n;i++)

    {

        for(int j=0;j<m;j++)

        {

            if(a[i][j]-'0'!=0)

            {

                dfs(i,j);

                ans++;

            }

        }

    }

    cout<<ans;

    return 0;

}

这篇文章,是又一个故事的结束...
lazy's story is continuing.
原文地址:https://www.cnblogs.com/Hello-world-hello-lazy/p/14018562.html