Time Limit: 10 second

Memory Limit: 2 MB

问题描述

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

1034560500

2045600671

0000000089

有四个细胞

Input

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

Output

细胞的个数。

Sample Input

4 10
0234500067
1034560500
2045600671
0000000089

Sample Output

4

【题解】

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

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

【代码】

#include <cstdio>
#include <iostream>
#include <string> using namespace std; const int dx[5] = {0,0,0,1,-1}; //4个扩展方向
const int dy[5] = {0,1,-1,0,0}; int n,m,ans = 0,dl[10000][2];
string ss[110];
bool bo[110][110]; void input_data()
{
scanf("%d %d",&n,&m);
for (int i = 1;i <= n;i++)
for (int j = 0;j <= m-1;j++) //先将所有位置都置为细胞数
bo[i][j] = true;
for (int i = 1;i <= n;i++) //输入数据
cin >> ss[i];
for (int i = 1;i <= n;i++) //如果这个位置的数字为0,那么就把这个位置置为false,表示非细胞数
for (int j = 0;j <m;j++)
if (ss[i][j] == '0')
bo[i][j] = false;
} void bfs(int x,int y)
{
bo[x][y] = false;
ans++;
int head = 1,tail = 1; //头结点 尾结点
dl[head][0] = x;dl[head][1] = y;
while (head <= tail)//如果队列中还有元素
{
int xx = dl[head][0],yy = dl[head][1]; //先把头结点元素取出来
head++;
for (int i = 1;i <= 4;i++)//往4个方向扩展,寻找连通块。
{
int tx = xx + dx[i],ty = yy + dy[i]; //获取改变后的位置.
if (tx < 1) continue;//如果超过了边界就要跳过
if (tx > n) continue;
if (ty < 0) continue;
if (ty > m-1) continue;
if (bo[tx][ty]) //如果这个位置是细胞数 就置为 false 找到一个连通块后入队列继续找
{
bo[tx][ty] = false;
dl[++tail][0] = tx; //入队列。
dl[tail][1] = ty;
}
}
}
} void get_ans()
{
for (int i = 1; i <= n;i++)
for (int j = 0 ;j <= m-1;j++) //遇到了一个细胞数,则从这个位置开始搜索.
if (bo[i][j])
bfs(i,j);
} void output_ans()
{
printf("%d\n",ans);
} int main()
{
input_data();
get_ans();
output_ans();
return 0;
}

【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. P2P平台项目建设几点注意事项

    种选择 a.资金池,接入第三方支付,财付通,宝付等,比如一起好 b.第三方资金托管,易宝支付.汇付天下等 c.银行存管,资金放在银行 资金池政策风险,不得不考虑. 每一种模式,技术实现都有变化,需要考 ...

  2. 原生js大总结三

    021.定义函数的几种方式   1.关键字函数:function fnName(){};   2.字面量函数:var fn = function(){};   3.构造函数:var fn = new ...

  3. 【Codeforces Round #431 (Div. 2) B】 Tell Your World

    [链接]点击打开链接 [题意] n个点,x从左到右严格递增的顺序给出 让你划两条平行的,且没有相同点的直线; 使得它们俩各自最少穿过一个点. 且它们俩穿过了所有的点. [题解] 枚举第一个点和哪个点组 ...

  4. 边缘独立(marginal independent)的理解及举例

    1. 定义 ∀xi∈dom(X),yj∈dom(Y),yk∈dom(Y),如果满足, P(X=xi|Y=yj)==P(X=xi|Y=yk)P(X=Xi) 则称随机变量 X 边缘独立于随机变量 Y. 理 ...

  5. 下拉列表,点击选择实现跳转链接 onchange="window.location=..."

    <select onchange="window.location=this.value;"> <option value="a.html"& ...

  6. 编程——C语言的问题,堆栈

    堆和栈的区别一.预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结 ...

  7. UVA 11646 - Athletics Track || UVA 11817 - Tunnelling the Earth 几何

    题目大意: 两题几何水题. 1.UVA 11646 - Athletics Track 如图,体育场的跑道一圈400米,其中弯道是两段半径相同的圆弧,已知矩形的长宽比例为a:b,求长和宽的具体数值. ...

  8. Kinect开发笔记之三Kinect开发环境配置具体解释

            0.前言:        首先说一下我的开发环境,Visual Studio是2013的,系统是win8的64位版本号,SDK是Kinect for windows SDK 1.8版本 ...

  9. swiper如何实现轮播嵌套轮播

    之所以要写这篇文章是因为插件有个bug,要改掉这个bug比较麻烦,所以就想了个折中的办法,绕过这个限制,方法千万条,功能干出来第一条,哈哈 最近做了个需求,效果图是这样的 第一个框是大轮播,第二个框是 ...

  10. UIScrollView(滚动试图)

    UIScrollView(滚动试图) 1.简介 为什么有UISCrollView: 在iOS开发中,由于移动设备的屏幕大小有限,所以不能像PC一样显示很多内容,因此当手机屏幕需要展示的内容较多超出一个 ...