当前位置: 首页 > news >正文

记录--洛谷 P1451 求细胞数量

如果想查看完整题目,请前往洛谷 P1451 求细胞数量

P1451 求细胞数量

题目描述

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

输入格式

第一行两个整数代表矩阵大小 n n n m m m

接下来 n n n 行,每行一个长度为 m m m 的只含字符 09 的字符串,代表这个 n × m n \times m n×m 的矩阵。

输出格式

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

思路

一坨细胞在一起只算一个,所以要求的细胞数是方阵中有几个一坨。
bfs将聚在一起的细胞标记。

C++完整代码

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
int n, m;
vector<vector<int> > maps(105, vector<int>(105, 0));
int ans = 0;
int dirx[] = {0, 0, -1, 1};
int diry[] = {-1, 1, 0, 0};
vector<vector<int> > vis(105, vector<int>(105, 0));


queue<pair<int, int> > s;
void dfs(int x, int y) {
    //初始点入队列
    pair<int, int> point(x, y);
    vis[x][y] = 1;//标记已经访问过了
    s.push(point);
    //如果队列空了,说明这个初始点周围所有的1~9都已经标记过了,这一坨就算1个细胞了。
    while(!s.empty()) {
        int tx = s.front().first;
        int ty = s.front().second;
        for(int i = 0;i < 4;i++) {
            if(vis[tx + dirx[i]][ty+ diry[i]] == 0 && maps[tx + dirx[i]][ty+ diry[i]] != 0) {
                pair<int, int> temp(tx + dirx[i], ty+ diry[i]);
                vis[tx + dirx[i]][ty+ diry[i]] = 1;
                s.push(temp);
            }
        }
        s.pop();
    }
    ans++;
    return ;

}

int main() {
    cin >> n >> m;
    for(int i = 1;i <= n;i++) {
        string temp;
        cin >> temp;
        for(int j = 1;j <= m;j++) {
            maps[i][j] = temp[j - 1] - '0';
        }
    }
    //在主函数找方阵中还没被标记的细胞。
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++ ) {
            if(vis[i][j] == 0 && maps[i][j] != 0) {
                dfs(i, j);
            }
        }
    }
    cout << ans << endl;


    return 0;
}

相关文章:

  • MySQL数据库的简单练习
  • 详解分辨率、像素值与图像大小:数字图像的三大支柱
  • ospf虚拟链路配置
  • 学习资料电子版 免费下载的网盘网站(非常全!)
  • Linux Bash 单命令行解释 | 文件操作 / 字符串操作 / 重定向
  • Json工具(二)- GSON
  • 基于PyTorch的深度学习5—神经网络工具箱
  • STM32 Bootloader理解
  • LLM训练deepseek如何识别语音
  • linux 系统 之centos安装 docker
  • 【AI 大模型】RAG 检索增强生成 ⑧ ( 文本相似度排序 | Bi-Encoder 双编码器 | Cross-Encoder 交叉编码器 )
  • Docker 篇
  • IU5380C同步降压型2~4节多类型锂电池充电管理IC
  • 【形态学操作中的腐蚀和膨胀详解】
  • RuleOS:区块链开发的“破局者”,开启DApp创新的新纪元
  • Python入门3:类与面对对象
  • LeetCode 376. 摆动序列 java题解
  • 从 “12.3” 的崩溃到完美的解决方案:一场类型选择的冒险之旅
  • 蓝桥杯备赛-差分-重新排序
  • hive面试题--left join的坑
  • 商务部回应美方加严限制中国芯片:敦促美方立即纠正错误做法
  • 中央军委决定调整组建3所军队院校
  • 孙简任吉林省副省长
  • 事关心脏健康安全,经导管植入式人工心脏瓣膜国家标准发布
  • 高适配算力、行业大模型与智能体平台重塑工业城市
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨