洛谷P1451 求细胞数量

题目描述

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

解题思路

在这里插入图片描述
如上图所示,该矩阵可以划分为4个细胞。对该矩阵进行扫描,如果当前元素不为0,细胞个数加1,然后对其四个方向进行递归,然后将当前元素置为0。这样子通过两重循环就可以找到矩阵中的细胞个数。

代码实现

#include <iostream>
#include <queue>
#define maxn 105
using namespace std;
char temp;
int n,m,ans;
int arr[maxn][maxn];
bool book[maxn][maxn];
int dx[] = {0,0,-1,1};
int dy[] = {1,-1,0,0};
void dfs(int x,int y){
    for(int i = 0; i < 4; i ++){
        int X = x+dx[i];
        int Y = y+dy[i];
        if(X <= 0 || X > n || Y <= 0 || Y > m){
            continue;
        }
        if(!arr[X][Y]){
            continue;
        }
        arr[X][Y] = 0;
        dfs(X,Y);
    }
}

int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= m; j ++){
            cin >> temp;
            arr[i][j] = temp-'0';
        }
    }
    for(int i = 1; i <= n; i ++){
        for(int j = 1; j <= m; j ++) {
           if(arr[i][j]){
               book[i][j] = true;
               dfs(i,j);
               ans ++;
           }
        }
    }
    cout << ans << endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_37550202/article/details/88359547
今日推荐