Time Limit: 10 second

Memory Limit: 2 MB

问题描述

一矩形阵列由数字1~9代表细胞,细胞的定义是沿细胞数字上下左右如果还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如阵列: 0234500067

1034560500

2045600671

0000000089

有四个细胞

Input

第一行为整数m,n,接着m行,每行由n个数字。

Output

细胞的个数。

Sample Input

  1. 4 10
  2. 0234500067
  3. 1034560500
  4. 2045600671
  5. 0000000089

Sample Output

  1. 4

【题解】

可以用一个bool型数组来表示哪些是细胞数字,遇到0就把这个位置置为false,其他的数字则为true。从第一行第一列开始扫描,遇到一个为true的格子,答案+1,然后就开始广搜。往4个方向搜索,遇到为true的bool型数组就置为false.

这些“细胞”即是连通块。

【代码】

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. const int dx[5] = {0,0,0,1,-1}; //4个扩展方向
  8. const int dy[5] = {0,1,-1,0,0};
  9.  
  10. int n,m,ans = 0,dl[10000][2];
  11. string ss[110];
  12. bool bo[110][110];
  13.  
  14. void input_data()
  15. {
  16. scanf("%d %d",&n,&m);
  17. for (int i = 1;i <= n;i++)
  18. for (int j = 0;j <= m-1;j++) //先将所有位置都置为细胞数
  19. bo[i][j] = true;
  20. for (int i = 1;i <= n;i++) //输入数据
  21. cin >> ss[i];
  22. for (int i = 1;i <= n;i++) //如果这个位置的数字为0,那么就把这个位置置为false,表示非细胞数
  23. for (int j = 0;j <m;j++)
  24. if (ss[i][j] == '0')
  25. bo[i][j] = false;
  26. }
  27.  
  28. void bfs(int x,int y)
  29. {
  30. bo[x][y] = false;
  31. ans++;
  32. int head = 1,tail = 1; //头结点 尾结点
  33. dl[head][0] = x;dl[head][1] = y;
  34. while (head <= tail)//如果队列中还有元素
  35. {
  36. int xx = dl[head][0],yy = dl[head][1]; //先把头结点元素取出来
  37. head++;
  38. for (int i = 1;i <= 4;i++)//往4个方向扩展,寻找连通块。
  39. {
  40. int tx = xx + dx[i],ty = yy + dy[i]; //获取改变后的位置.
  41. if (tx < 1) continue;//如果超过了边界就要跳过
  42. if (tx > n) continue;
  43. if (ty < 0) continue;
  44. if (ty > m-1) continue;
  45. if (bo[tx][ty]) //如果这个位置是细胞数 就置为 false 找到一个连通块后入队列继续找
  46. {
  47. bo[tx][ty] = false;
  48. dl[++tail][0] = tx; //入队列。
  49. dl[tail][1] = ty;
  50. }
  51. }
  52. }
  53. }
  54.  
  55. void get_ans()
  56. {
  57. for (int i = 1; i <= n;i++)
  58. for (int j = 0 ;j <= m-1;j++) //遇到了一个细胞数,则从这个位置开始搜索.
  59. if (bo[i][j])
  60. bfs(i,j);
  61. }
  62.  
  63. void output_ans()
  64. {
  65. printf("%d\n",ans);
  66. }
  67.  
  68. int main()
  69. {
  70. input_data();
  71. get_ans();
  72. output_ans();
  73. return 0;
  74. }

【9705】&&【a801】细胞的更多相关文章

  1. #include <NOIP2009 Junior> 细胞分裂 ——using namespace wxl;

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...

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

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...

  3. 【OpenCV】基于kmeans的细胞检测方法

    问题是这样的,有一幅经过二值化处理之后的图像,我们希望统计其中细胞的个数,和不同粘连情况的细胞个数,比如,下图中有1个细胞组成连通区域的,也有2个细胞组成连通区域的,也有更多个细胞组成连通区域的,我们 ...

  4. Luogu T7152 细胞(递推,矩阵乘法,快速幂)

    Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...

  5. Luogu P1451 求细胞数量

    题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式 输 ...

  6. 数细胞-swust oj

    数细胞(0964) 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.编程需要用到的队列及其相关函数已经实现,你只需要完 ...

  7. 【洛谷T7152】(考试题目)细胞

    题面 题目描述 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每天每个该细胞可以分裂出 x − 1 个新的细胞. 小 X 决定第 ...

  8. 细胞(cell) 矩阵快速幂

    题目描述小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并观察细胞分裂的规律.他选取了一种特别的细胞,每天每个该细胞可以分裂出 x 1 个新的细胞.小 X 决定第 i 天向培养皿中 ...

  9. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

随机推荐

  1. (转)ORA-01940: cannot drop a user that is currently connected 问题解析

    删除数据库用户的时候经常会遇到这样的错误: ORA: cannot drop a user that is currently connected 原因是有程序在连接我们需要删除的用户,我们删除用户之 ...

  2. 洛谷——P1774 最接近神的人_NOI导刊2010提高(02)

    https://www.luogu.org/problem/show?pid=1774 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古 ...

  3. 关于android的2.2与4.4的文件读取的一点发现

    好久没有写文章了,本来想写的东西,时间一长,就感觉不想写了.没什么用,到用时.又不知道去哪找了或怎么解决. 有一句话说的好啊,好记性不如烂笔头. 我要做到善于总结.及时整理,额............ ...

  4. Android 最火的高速开发框架AndroidAnnotations使用具体解释

    Android 最火的高速开发框架androidannotations配置具体解释文章中有eclipse配置步骤.Android 最火高速开发框架AndroidAnnotations简介文章中的简介. ...

  5. C#使用wkhtmltopdf.exe,HTML页面转化为PDF文档

    此文用来记录使用wkhtmltopdf.exe在C#代码中将html转换为PDF的过程: 1,在http://wkhtmltopdf.org/downloads.html 下载wkhtmltopdf. ...

  6. DNW烧写FL2440 NAND Flash分区

    转自 calvinlee1984 Subject:DNW烧写FL2440 NAND Flash分区 Date:     2-Mar-2011 By:         Calvinlee1984@163 ...

  7. [WPF自定义控件库]使用TextBlockHighlightSource强化高亮的功能,以及使用TypeConverter简化调用

    1. 强化高亮的功能 上一篇文章介绍了使用附加属性实现TextBlock的高亮功能,但也留下了问题:不能定义高亮(或者低亮)的颜色.为了解决这个问题,我创建了TextBlockHighlightSou ...

  8. PHP 分布式集群中session共享问题以及session有效期的设置

    https://blog.csdn.net/m_nanle_xiaobudiu/article/details/81177698

  9. Net知识

    Net知识图谱   对于Web系统开发来说,Net其实也是有好多知识点需要学的,虽然目前JAVA是主流,就业市场比较大,但Net也在积极的拥抱开源,大Net Core 2 出来了,这无疑给Net开发者 ...

  10. [RxJS] Use takeUntil instead of manually unsubscribing from Observables

    Manually unsubscribing from subscriptions is safe, but tedious and error-prone. This lesson will tea ...