zoukankan      html  css  js  c++  java
  • 洛谷 P1451 求细胞数量

    题目描述

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

    输入格式

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

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

    输出格式

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

    输入输出样例

    4 10
    0234500067
    1034560500
    2045600671
    0000000089
    

      

    4
    

    分析

    基础bfs染色题目,将字符串转化为整型01图来标记,遍历每一个点,如果这个点没有被标记,则代表整个区块没有被标记,从当前点染色整个区块。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    
    int n,m;
    
    char mp[105][105];
    int mark[105][105];
    int ans;
    int move_x[4]={0,-1,0,1};
    int move_y[4]={1,0,-1,0}; 
    
    struct Point
    {
        int xx;
        int yy;
        Point(int _xx,int _yy):
            xx(_xx),yy(_yy){}
    };
    
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cin>>mp[i][j];
                if(mp[i][j]=='0') mark[i][j]=1;//打好标记不能走 
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(mark[i][j]==1) continue;//走不了 
                queue <Point> node;
                node.push(Point(i,j));
                mark[i][j]=1;//染色
                ans++;//区块之前没有被染色,答案+1 
                while(!node.empty())//染色当前点所在区块 
                {
                    Point now_node=node.front();
                    node.pop();
                    for(int k=0;k<4;k++)
                    {
                        Point new_node=Point(now_node.xx+move_x[k],now_node.yy+move_y[k]);
                        if(mark[new_node.xx][new_node.yy]!=1&&new_node.xx<=n&&new_node.xx>=1&&new_node.yy>=1&&new_node.yy<=m)
                        {
                            mark[new_node.xx][new_node.yy]=1;
                            node.push(new_node);
                        }
                    }
                }
            }
        }
        cout<<ans<<endl;
        return 0;
    }
  • 相关阅读:
    前后端渲染
    ES6模块化
    关于跨域请求
    移动端经常出现的兼容问题
    移动端开发
    4.sass的分支结构、循环结构、函数
    3.sass的数据类型与函数
    2.sass变量、嵌套、混合(mixin)、继承拓展、@import、comment
    1.sass的安装,编译,还有风格
    微信小程序上拉加载分页数据---包括tab选项卡切换(优化方案)
  • 原文地址:https://www.cnblogs.com/KyleDeng/p/15560172.html
Copyright © 2011-2022 走看看