题目链接:http://codevs.cn/problem/3492/

https://www.luogu.com.cn/problem/P1451

题目描述 Description

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

0234500067
1034560500
2045600671
0000000089
有4个细胞。

输入描述 Input Description

【输入格式】

整数m,n

(m行,n列)矩阵

输出描述 Output Description

【输出格式】

细胞的个数。

样例输入 Sample Input

4  10

0234500067
1034560500
2045600671
0000000089

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

1<=m,n<=1000

题目分析:

首先,题目描述的数据格式跟后台检测的数据格式不一致。后台检测的数据格式类似于下面:

4 10
0 2 3 4 5 0 0 0 6 7
1 0 3 4 5 6 0 5 0 0
2 0 4 5 6 0 0 6 7 1
0 0 0 0 0 0 0 0 8 9

所以,输入数据时应该要用int数组直接保存即可,不是用char数组保存。

【算法思路】
⑴从文件中读入m*n矩阵阵列,将其转换为bool矩阵存入b数组中;
⑵沿b数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
⑶将细胞的位置入队h,入队后的位置b数组置为flase;
⑷将h队的队头出队,沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑸重复4,直至h队空为止,则此时找出了一个细胞;
⑹重复2,直至矩阵找不到细胞;
⑺输出找到的细胞数。

AC代码:

 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
bool b[][];
int n,m,a[][],ans=;
int dx[] = {-,,,},
dy[] = {,,,-};
void bfs(int x, int y)
{
int hx[],hy[],head=,tail=,tx,ty;
ans++;
hx[]=x,hy[]=y;
b[x][y]=false;
for(;head<=tail;++head)
{
for (int i=;i<=;++i)
{
tx=hx[head]+dx[i],
ty=hy[head]+dy[i];
if(tx> && tx<=m && ty> && ty<=n && b[tx][ty])
{
tail++;
hx[tail]=tx,
hy[tail]=ty;
b[tx][ty]=false;
}
}
}
}
int main()
{
scanf("%d%d",&m,&n);
for (int i=;i<=m;++i)
for (int j=;j<=n;++j)
b[i][j]=true;
for (int i=;i<=m;++i)
for (int j=;j<=n;++j)
{
scanf("%1d",&a[i][j]);
if (!a[i][j]) b[i][j]=false;
}
for (int i=;i<=m;++i)
for (int j=;j<=n;++j)
if(b[i][j]) bfs(i,j);
printf("%d",ans);
return ;
}

另一种写法:

 #include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
int main(int argc, char *argv[])
{
queue<int> qx,qy;
int n,m,i,j,x,y;
int a[][];
int count=;//细胞个数 scanf("%d%d",&n,&m);
for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
scanf("%d",&a[i][j]);
//printf("%d ",a[i][j]);
}
//printf("\n");
} for(i=;i<n;i++)
{
for(j=;j<m;j++)
{
if(a[i][j]!=)
{
qx.push(i); qy.push(j);
a[i][j]=;
while(!qx.empty())
{
x=qx.front(); qx.pop();
y=qy.front(); qy.pop(); if(y+<m&&a[x][y+]!=)//当前坐标x,y的右边
{
qx.push(x); qy.push(y+);
a[x][y+]=;
}
if(x+<n&&a[x+][y]!=)//当前坐标x,y的下边
{
qx.push(x+); qy.push(y);
a[x+][y]=;
}
if(y->=&&a[x][y-]!=)//当前坐标x,y的左边
{
qx.push(x); qy.push(y-);
a[x][y-]=;
}
if(x->=&&a[x-][y]!=)//当前坐标x,y的上边
{
qx.push(x-); qy.push(y);
a[x-][y]=;
}
}
count++;
}
}
}
printf("%d\n",count);/**/
return ;
}

code vs 3492 细胞个数的更多相关文章

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

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

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

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

  3. Luogu P1451 求细胞数量

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

  4. 数细胞-swust oj

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

  5. P1451 求细胞数量

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

  6. 【一本通1329:【例8.2】细胞&&洛谷P1451 求细胞数量】

    1329:[例8.2]细胞 [题目描述] 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.如: 阵列 4 10 023 ...

  7. 洛谷 P1451 求细胞数量

    题目链接 https://www.luogu.org/problemnew/show/P1451 题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字 ...

  8. 【dfs】p1451 求细胞数量

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

  9. 计算细胞数【BFS】

    问题描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数. 输入格式 2行:第1行为两个整数 mm, nn, 代表矩阵 ...

随机推荐

  1. The "Out of socket memory" error

    The "Out of socket memory" error I recently did some work on some of our frontend machines ...

  2. django的数据库操作

    ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中,ORM在业务逻辑层和数据库层之间充当了桥梁的作用. django的交互式shell python manage ...

  3. Doxygen简单经验谈。。。

    Doxygen,大名鼎鼎的文档生成工具,被Boost.OpenCasCade等诸多项目作为文档生成的不二人选.人说,才华横溢往往是高深莫测,这句话放在 Doxygen这里显然是不适用的.十八般武艺样样 ...

  4. 构建配置 ProGuard Shrink 混淆和压缩

    官方文档 压缩代码和资源 要尽可能减小 APK 文件,您应该启用压缩来移除 release build 中未使用的代码和资源.此页面介绍如何执行该操作,以及如何指定要在构建时保留或舍弃的代码和资源. ...

  5. Hadoop视频教程汇总

    一 慕课网 1.Hadoop大数据平台架构与实践--基础篇(已学习) 链接:https://www.imooc.com/learn/391 2.Hadoop进阶(已学习) 链接:https://www ...

  6. Windows 安装配置 JIRA

    MySQL-5.5.28 JDK1.6.0_21 JIRA功能全面,界面友好,安装简单,配置灵活,权限管理以及可扩展性方面都十分出色. 一.MySQL建库和建账号 1. mysql中创建数据库jira ...

  7. python3 验证码去噪

    处理前图像: 处理后图像 代码 #coding:utf8 import os from PIL import Image,ImageDraw,ImageFile import numpy import ...

  8. 转:CRF++词性标注

    CRF++词性标注 2016-02-28 分类:NLP 阅读(5558) 评论(19)  训练和测试的语料都是人民日报98年标注语料,训练和测试比例是10:1,直接通过CRF++标注词性的准确率:0. ...

  9. 【转载】.NET/C#-uploadify视频文件or大文件上传

    引言 之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章: [Asp.net]Up ...

  10. Centos下修改hostname

    之前安装Centos时候,没有怎么注意,将自己的名字设置为hostname,总感觉好别扭,很不习惯,如是就想把hostname改一下,用到hostname命令. 首先用hostname命令查看当前的主 ...