数细胞

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

第一行输入两个整数,分别代表矩阵的行和列 输入m*n的矩阵,由数字0到9组成。

输入:

4 10

1 2 3 4 5 1 1 1 6 7

1 0 3 4 5 6 1 5 1 0

2 0 4 5 6 6 1 6 7 1

0 0 6 0 6 6 1 0 8 9

输出:

1

代码:

#include<iostream>
#include<queue>
using namespace std;
const int gx[4]={0,0,-1,1};
const int gy[4]={1,-1,0,0};
int m,n,total=0;
int 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<<total;
    return 0;
}
void init()
{
    cin>>m>>n;
    for(int i=1;i<=m;i++)
        for(int j=1;j<=n;j++)
                cin>>a[i][j];
}
void work(int x,int y)
{
    queue<int>qx,qy;//两个队列分别储存当前点的行与列
    total++;
    int xx,yy;
    qx.push(x);//把当前细胞的行和列入队
 qy.push(y);
 a[x][y] = 0;//当前细胞因为已计算,赋为false
    while(!qx.empty())//当队列不为空
    {
        for(int i=0;i<4;i++)
        {
            xx=qx.front()+gx[i];
            yy=qy.front()+gy[i];
            //如果没有越界,并且(xx,yy)是细胞,入队
            if(xx>0 && xx <= m && yy>0 && yy <= n && a[xx][yy])
            {
                qx.push(xx);
                qy.push(yy);
                a[xx][yy] = 0;
            }
        }
        //for循环结束,a[x][y]相邻细胞处理完成,将其出队
        qx.pop();
        qy.pop();
    }
}

时间: 2024-11-07 21:56:51

数细胞的相关文章

数细胞-swust oj

数细胞(0964) 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完成count函数以及主函数即可. 第一行输入两个整数,分别代表矩阵的行和列 输入m*n的矩阵,由数字0到9组成. 4 10 1 2 3 4 5 1 1 1 6 7 1 0 3 4 5 6 1 5 1 0 2 0 4 5 6 6 1 6 7 1 0 0 6 0 6 6 1 0 8 9 细胞个数. 1

ACM-数细胞

题目描述:数细胞 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完成count函数以及主函数即可. #include #include using namespace std; const int maxsize =50000; struct pos { int x; int y; }; typedef struct se { pos data[maxsize];

自己来实现一个简易的OCR

来做个简易的字符识别 ,既然是简易的 那么我们就不能用任何的第三方库 .啥谷歌的 tesseract-ocr, opencv 之类的 那些玩意是叼 至少图像处理 机器视觉这类课题对我这种高中没毕业的人来说是一座高山 对于大多数程序员都应该算难度不小吧. 但是我们这里 这么简陋的功能 还用那些玩意 作为一个程序员的自我修养 你还玩个球.管他代码写得咋个low 效率咋个低 被高手嗤之以鼻也好 其实那些高手也就那样 把你的代码走起来  ,这是一件很好玩的事情. 以前一直觉着这玩意挺神奇 什么OCR o

TYVJ 1127 计算细胞数(DFS)

计算细胞数 From 陈超锐 描述 Description 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数. 如:阵列 0234500067 1034560500 2045600671 0000000089  有4个细胞 输入格式 InputFormat 第一行 :两个数字M N (1<=M<=50 1<=N<80)表示该阵列有M行N列  从第2行到第M+1行 每行有连续的N个字符 输出格式 Outp

【BZOJ 2323】 2323: [ZJOI2011]细胞 (DP+矩阵乘法+快速幂*)

2323: [ZJOI2011]细胞 Description 2222年,人类在银河系外的某颗星球上发现了生命,并且携带了一个细胞回到了地球.经过反复研究,人类已经完全掌握了这类细胞的发展规律: 这种细胞最初的形态是"长条形",一端是头,一端是尾,中间是躯干.细胞内部含有一列密码(你可以认为它是这种细胞的DNA).密码是一个长度为n的数字串,且仅含有1~9这9种数字,沿着细胞的躯干从头到尾排列着. 首先,细胞会经历一次分裂.细胞将沿躯干方向分裂成若干个球体,躯干将退化成丝状物,连接着相

NOIP2009普及组细胞分裂(数论)——yhx

题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个第 i 种细胞经过 1 秒钟可以分裂为 Si个同种细胞(Si为正整数).现在他需要选取某种细胞的一个放进培养皿,让其自由分裂, 进行培养.一段时间以后,再把培养皿中的所有细胞平均分入 M 个试管,形成 M 份样本, 用于实验.Hanks 博士的试管数 M 很大,普通的计算机的基本数据类型无法存储这样

地球上第一个细胞是怎样产生的?

大家知道,生命(Life)是由细胞(Cells)组成的.所以,弄清楚细胞的来历是第一位的事情,否则,细胞理论就是"空谈,没有事实根据,不能算是科学.科普就是讲道理,不能动用消化系统,不动脑筋,去搞什么"试吃"活动. 有人说,地球上最早的生命(细胞)是由外太空陨石带到地球上的.这种说法少不了有上帝的影子.较为可信的说法是,大概在35亿年之前,在地球的沿海地带,在风浪作用下产生无数细碎的微型泡沫.有一些油质(oily)的泡沫,表面含有磷(P)元素.从化学性质上来看,磷的化合键是很

BNUOJ34976数细菌

数细菌 Time Limit: 1000ms Memory Limit: 65536KB Special Judge 64-bit integer IO format: %lld      Java class name: Main Prev Submit Status Statistics Discuss Next Font Size:  +   - Type:   None Graph Theory      2-SAT     Articulation/Bridge/Biconnected

【NOIP2009】第三题&#183;细胞分裂

题目描述 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实验做准备工作:培养细胞样本.Hanks 博士手里现在有N 种细胞,编号从1~N,一个第i 种细胞经过1 秒钟可以分裂为Si 个同种细胞(Si 为正整数).现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,进行培养.一段时间以后,再把培养皿中的所有细胞平均分入M 个试管,形成M 份样本,用于实验.Hanks 博士的试管数M 很大,普通的计算机的基本数据类型无法存储这