zoukankan      html  css  js  c++  java
  • sdf1552


    问题 B: 细胞问题

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 739  解决: 402
    [提交][状态][讨论版]

    题目描述

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

    输入

    第一行 :两个数字M N (1<=M<=50 1<=N<80)表示该阵列有M行N列,从第2行到第M+1行 每行有连续的N个字符。

    输出

    一行: 细胞个数。

    样例输入

    4 10
    0234500067
    1034560500
    2045600671
    0000000089
    

    样例输出

    4

    提示


    #include<cstdio>

    #include<cstring>
    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<queue>
    using namespace std;

    /*
    4 10
    0234500067
    1034560500
    2045600671
    0000000089
    思路,
    */

    int m,n;
    const int MAXM=50;
    const int MAXN=80;
    int a[MAXM][MAXN];//存地图
    int vis[MAXM][MAXN];//存标记
    int dir[4][2] = {
        { -1, 0 }, { 0, 1 }, { 1, 0 }, { 0, -1 }
    };

    void bfs(int i, int j)
    {
        queue<pair<int,int>> q;
        //找到一个队列头
        vis[i][j]=1;
        q.push({i, j});

        //所有相关的全部入队搜索
        while(!q.empty())
        {
            auto f=q.front();
            q.pop();
            int nx,ny;
            for(int k=0;k<4;k++)
            {
                nx=f.first+dir[k][0];
                ny=f.second+dir[k][1];
                if(nx<0 || nx>=m || ny<0 || ny>=n)
                    continue;
                if(a[nx][ny]!=0 && !vis[nx][ny])
                {
                    vis[nx][ny]=1;
                    q.push({nx, ny});
                }
            }
        }
    }

    int main()
    {  
        cin>>m>>n;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
            {
                char c;
                cin>>c;
                a[i][j]=c-'0';
            }

        int cnt=0;//总共几个细胞

        // 遍历所有非0点,用队列宽搜,搜索时做标记
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
            {
                //找到一个队列头
                if(a[i][j]!=0 && !vis[i][j])
                {
                    cnt++;
                    bfs(i,j);
                }

            }
        cout<<cnt<<endl;
        return 0;
    }



  • 相关阅读:
    mac上finalShell的安装
    c 字符串与字符串操作
    .net5 MailKit
    c 99乘法表
    element 动态表单加自定义校验
    遇到的问题 vscode 问题
    vue-element-admin eslint 规则查询表
    利用html2canvas 导出网页 (只是用于自己的笔记,如果需要看配置,自行查找插件api)
    git 常用命令
    uniapp中自动打包微信小程序后自动上传代码
  • 原文地址:https://www.cnblogs.com/cute/p/15424671.html
Copyright © 2011-2022 走看看