• 【科创网试题】细胞


    细胞
    难度级别:A; 运行时间限制:1000ms; 运行空间限制:256000KB; 代码长度限制:2000000B
    试题描述
    一个n*m的矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为:沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
    输入
    第一行输入两个数n和m。
    接下来的n行m列输入矩阵,由0到9组成。
    输出
    输出矩阵里的细胞个数
    输入示例
    4 10
    0234500067
    1034560500
    2045600671
    0000000089
    输出示例
    4
    其他说明
    1<=n,m<=1,000,000
    此题由YSF出品~
    #include<iostream>  
    #include<cstring>  
    #include<queue>  
    #include<cstdio>  
    using namespace std;  
    const int gx[4]={0,0,-1,1};  
    const int gy[4]={1,-1,0,0};  
    int m,n,tot=0;  
    bool a[110][110];  
    void init();  
    void work(int,int);  
    int main()  
    {  
        init();  
        for(int i=1;i<=m;i++)//枚举整个m*n矩阵   
          for(int j=1;j<=n;j++)  
            if(a[i][j])work(i,j);//找到一个细胞,并对该细胞进行处理   
        cout<<tot<<endl;  
        return 0;  
    }  
    void work(int x,int y)  
    {  
        queue<int> qx,qy;//两队列分别存储当前点的行和列   
        int x1,y1;  
        tot++;//细胞数加一   
        qx.push(x);//把当前细胞的行和列入队   
        qy.push(y);  
        a[x][y]=0;//当前细胞因为已计算,赋为false   
        while(!qx.empty())//当队列非空   
        {  
            for(int i=0;i<4;i++)//对当前细胞的上下左右进行搜索   
            {  
                x1=qx.front()+gx[i];  
                y1=qy.front()+gy[i];  
                if(x1>0&&x1<=m&&y1>0&&y1<=n&&a[x1][y1])  
                {  
                    qx.push(x1);//如果没有越界且(x1,y1)为细胞 ,入队   
                    qy.push(y1);  
                    a[x1][y1]=false;   
                }  
            }  
            qx.pop();//for循环结束,a[x][y]相邻细胞处理完成,则 将其出队   
            qy.pop();  
        }  
    }  
    void init()  
    {  
        string s;  
        cin>>m>>n;  
        for(int i=1;i<=m;++i)  
        {  
            cin>>s;   
            for(int j=0;j<n;++j)  
              if(s[j]=='0')a[i][j+1]=0;  
              else a[i][j+1]=1;  
        }  
    }  
  • 相关阅读:
    数组中只出现一次的数字
    平衡二叉树
    二叉树的深度
    数字在排序数组中出现的次数
    两个链表的第一个公共结点
    数组中的逆序对
    第一个只出现一次的字符
    丑数
    新浪微博授权时出现"关注 *** 的微博"
    Bear 實驗室: 什麼是Git flow ? 如何在SourceTree使用Git flow管理開發!
  • 原文地址:https://www.cnblogs.com/6666junyiliu/p/6024455.html
Copyright © 2020-2023  润新知