求细胞个数

题目

题目描述

一矩形阵列由数字0到9组成。我们把数字1到9称为细胞数字,数字0称为非细胞数字。
若一个细胞数字上、下、左、右仍是细胞数字,我们则把这些细胞数字称为同一细胞。 求给定矩形阵列中细胞的个数。

输入

第1行,整数m、n(m表示行,n表示列、1<=m,n<=1001<=m,n<=100)
接下来的m行表示输入的矩形阵列

输出

细胞的个数

样例输入

4  10
0234500067
1034560500
2045600671
0000000089

样例输出

4

思路

经典的bfs,只需要记录x,y。循环遍历每个点,碰到1~9,而且没有走过,ans++,从这个点开始搜索连着的一整块,用一个数组记录,走过的位置和连着一块的位置。

实质上就是一个找连通块的问题,把整个矩阵遍历一遍,然后把它周围八个方块与它相同的全部改成0,直到没有再和它相同的为止。

BFS版本代码

#include <bits/stdc++.h>
using namespace std;
int n, m, ans = 0, dx[8] = {1, -1, 0, 0}, dy[8] = {0, 0, 1, -1}, h[100013][3], zx, zy;
char b[103][103];
bool a[103][103];
void bfs(int x, int y) {
    ans++;
    a[x][y] = false;
    int head = 1, tail = 1;
    h[1][1] = x, h[1][2] = y;
    while (head <= tail) {
        for (int i = 0; i < 4; i++) {
            zx = h[head][1] + dx[i];
            zy = h[head][2] + dy[i];
            if (zx >= 1 && zx <= n && zy >= 1 && zy <= m && a[zx][zy]) {
                tail++;
                a[zx][zy] = false;
                h[tail][1] = zx, h[tail][2] = zy;
            }
        }
        head++;
    }
} 
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++) {
            cin >> b[i][j];
            if (b[i][j] != '0')
                a[i][j] = true;
            else
                a[i][j] = false;
        } 
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            if (a[i][j])
                bfs(i, j);
    cout << ans << endl;
    return 0;
}

小编蒟蒻一个,有什么问题请大佬不惜赐教Orz

posted @   骆美辰  阅读(117)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
  1. 1 淋雨一直走 张韶涵
  2. 2 一期一会《未闻花名》(Cover 茅野愛衣,戸松遥,早見沙織) 周深
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
淋雨一直走 - 张韶涵
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 姚若龙

作曲 : Henrik Tala/Hermanni Kovalainen/Ilanguaq Lumholt

编曲 : DJ Mobster Productions

制作人 : Jae Chong

Oh~ 人都应该有梦

有梦就别怕痛

有雷声在轰不停

雨泼进眼里看不清

谁急速狂飙

溅我一身 的泥泞

很确定我想去哪里

往天堂要跳过地狱

也不恐惧

不逃避

这不是脾气

这不是脾气

是所谓志气 与勇气

你能推我下悬崖

我能学会飞行

从不听

谁的命令

很独立

耳朵用来听自己的心灵

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

有前面盘旋的秃鹰

有前面盘旋的秃鹰

有背后尖酸的耳语

黑色的童话

是给长大的洗礼

要独特才是流行

无法复制的自己

让我连受伤也有型

这不是脾气

是所谓志气 与勇气

你能推我下悬崖

我能学会飞行

从不听

谁的命令

很独立

耳朵用来听自己的心灵

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

有时掉进黑洞

有时掉进黑洞

有时掉进黑洞

有时候爬上彩虹

在下一秒钟

命运如何转动

没有人会晓得 Oh

我说希望无穷

你猜美梦成空

相信和怀疑

总要决斗

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

淋雨一直走

是一颗宝石就该闪烁

人都应该有梦

Oh

有梦就别怕痛

淋雨一直走

是道阳光就该暖和

人都应该有梦

Oh

有梦就别怕痛

OC/OA : Hermanni Kovalainen/Ilanguaq Lumholt/Henrik Tala

配唱制作人 : Jae Chong

配唱制作人 : Jae Chong

计算机程序编写 : DJ Mobster

录音师 : 潘尧泓

录音室 : Lights Up Studio (台北)

混音师 : Jae Chong

混音室 : AZIATIX Studio

OP : Warner/Chappell Music Finland / DJ Mobster Publishing

SP : Warner/Chappell Music Taiwan Ltd.

ISRC TW-R03-12-02003

lock: { enable: true, background: 'https://img1.baidu.com/it/u=2788089125,168843488&fm=253&app=138&size=w931&n=0&f=JPEG&fmt=auto?sec=1690563600&t=35fa4326e773b3fbf83562ad746b7cd2',//锁屏背景 strings: [ 'Every win named never give up 每一份胜利都叫不放弃',//签名 ], },
点击右上角即可分享
微信分享提示