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;
    }
  • 相关阅读:
    1>/dev/null 2>&1的含义
    rpm常用命令及rpm参数介绍
    linux按位运算
    关于比较运算符的一个例子
    js屏蔽效果
    jquery异步提交无刷新
    常用js验证
    获取输入字符的首字母(中文为拼音首字母)
    SQL查询合并字符串
    获取鼠标点击的坐标处理
  • 原文地址:https://www.cnblogs.com/KyleDeng/p/15560172.html
Copyright © 2011-2022 走看看