code vs 3492 细胞个数

Posted 寄蜉蝣于天地,渺沧海之一粟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于code vs 3492 细胞个数的主要内容,如果未能解决你的问题,请参考以下文章

vs code 自定义代码片段

vs code 用户代码片段 html.json

VS Code配置markdown代码片段

VS Code配置markdown代码片段

VS Code中自定义Emmet代码片段

<code> vs <pre> vs <samp> 用于内联和块代码片段