code vs 3492 细胞个数

简介: 题目链接:http://codevs.cn/problem/3492/题目描述 Description一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。

题目链接: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 }

 

相关文章
下列给定程序中,函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放一组有规律的数据如下图所示,由main函数输出。
下列给定程序中,函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放一组有规律的数据如下图所示,由main函数输出。
260 0
|
7月前
输入三个整数,以这三个数为边长,判断是否构成三角形;若不能输出”error”,若构成三角形,计算它的面积,保留2位小数输出。
输入三个整数,以这三个数为边长,判断是否构成三角形;若不能输出”error”,若构成三角形,计算它的面积,保留2位小数输出。
63 0
输出7和带7的值(1——100)
输出7和带7的值(1——100)
74 0
|
存储 算法
输出函数f(a,b)=2×a2+b2的最小的100个函数值及相应的两个参数的值
输出函数f(a,b)=2×a2+b2的最小的100个函数值及相应的两个参数的值
104 0
|
数据挖掘
scanpy不同cluster及细胞类型合并
scanpy不同cluster及细胞类型合并
HIMA 996920261/208475 当前误差值成比例的输出值
HIMA 996920261/208475 当前误差值成比例的输出值
HIMA 996920261/208475 当前误差值成比例的输出值
洛谷P1451-求细胞数量(DFS)
洛谷P1451-求细胞数量(DFS)
EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
[解题报告]【第23题】给定 a 和 b,代表分数 a / b,求它的最简分数
[解题报告]【第23题】给定 a 和 b,代表分数 a / b,求它的最简分数