code vs 3492 细胞个数

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

题目描述 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代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<queue>
 4 using namespace std;
 5 int main(int argc, char *argv[])
 6 {
 7     queue<int> qx,qy;
 8     int n,m,i,j,x,y;
 9     int a[1002][1002];
10     int count=0;//细胞个数
11
12     scanf("%d%d",&n,&m);
13     for(i=0;i<n;i++)
14     {
15         for(j=0;j<m;j++)
16         {
17             scanf("%d",&a[i][j]);
18             //printf("%d ",a[i][j]);
19         }
20         //printf("\n");
21     }
22
23     for(i=0;i<n;i++)
24     {
25         for(j=0;j<m;j++)
26         {
27             if(a[i][j]!=0)
28             {
29                 qx.push(i);   qy.push(j);
30                 a[i][j]=0;
31                 while(!qx.empty())
32                 {
33                     x=qx.front();  qx.pop();
34                     y=qy.front();  qy.pop();
35
36                     if(y+1<m&&a[x][y+1]!=0)//当前坐标x,y的右边
37                     {
38                         qx.push(x);  qy.push(y+1);
39                         a[x][y+1]=0;
40                     }
41                     if(x+1<n&&a[x+1][y]!=0)//当前坐标x,y的下边
42                     {
43                         qx.push(x+1);  qy.push(y);
44                         a[x+1][y]=0;
45                     }
46                     if(y-1>=0&&a[x][y-1]!=0)//当前坐标x,y的左边
47                     {
48                         qx.push(x); qy.push(y-1);
49                         a[x][y-1]=0;
50                     }
51                     if(x-1>=0&&a[x-1][y]!=0)//当前坐标x,y的上边
52                     {
53                         qx.push(x-1); qy.push(y);
54                         a[x-1][y]=0;
55                     }
56                 }
57                 count++;
58             }
59         }
60     }
61     printf("%d\n",count);/**/
62     return 0;
63 }
时间: 2024-10-10 16:33:55

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

模拟一下细胞的繁殖

原贴地址 原帖: 1. 如果一个细胞只有0或1个邻居,它将因为孤独而死: 2. 如果一个细胞有4到8个邻居,它将因为拥挤而死: 3. 如果一个细胞恰有2或者3个邻居,它将继续生存下去: 4. 如果一个空格子恰有3个邻居,将“生”出一个新细胞: 5. 其他的空格子继续维持原状. 提示: 细胞,可以用对象来存储, 属性是: 编号随机不重复,死,活,邻居数量,邻居集合 ( 用链表来存放其他细胞集合) 开始输入随机个细胞和邻居随机组合,然后每1秒一个周期,演示发展结果 我的实现: Code using 

Luogu P1451 求细胞数量

题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数.(1<=m,n<=100)? 输入输出格式 输入格式: 输入:整数m,n(m行,n列) 矩阵 输出格式: 输出:细胞的个数 输入输出样例 输入样例#1: 4 10 0234500067 1034560500 2045600671 0000000089 输出样例#1: 4 解释样例: 0234500067 1034560500 2045600671 000

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

数细胞-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

NOIP模拟题——细胞分裂

[问题描述]小 A 养了一大坨细胞. 最初小 A 只有 1 个细胞.每秒,小 A 的每个细胞都会分裂成 2 个细胞. 已知:现在离“最初”已经过去了x秒,那么现在的细胞数当然是可以计算的. 小 A 想知道的当然不是当前的细胞数.小 A 知道他养的细胞的习性:每 y 个细胞会聚成一团.经常会有剩下的细胞,那么我们称这些细胞是孤独的. 小 A 想知道的就是孤独的细胞个数.[输入文件]输入文件为 cell.in. 输入文件共一行,为两个整数 xy,以空格隔开.[输出文件]输出文件为 cell.out.

数细胞

一矩形阵列由数字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

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];

Python之code对象与pyc文件(一)

Python程序的执行过程 我们都知道,C语言在执行之前需要将源代码编译成可执行的二进制文件,也就是将源代码翻译成机器代码,这种二进制文件一旦生成,即可用于执行.但是,Python是否一样呢?或许很多人都听过,Python和Java都是半编译半解释的语言,那么问题来了,什么又是半编译半解释呢?这还要从C语言开始说起 比方我们现在有一段C语言写成的程序,我们在一台Linux服务器上编译好了,生成可执行的二进制文件,可是我现在想要在一台Windows的机器上执行这个文件,这是不可能的,原因是因为不同

细胞(搜索)

问题 T: [搜索]细胞 时间限制: 1 Sec  内存限制: 64 MB提交: 7  解决: 7[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数. 输入 用空格隔开的整数m,n(m行,n列)矩阵(1≤m,n≤100). 输出 细胞的个数. 样例输入 复制样例数据 4 10 0234500067 1034560500 2045600671 0000000