zoukankan      html  css  js  c++  java
  • 细胞

    【题目】

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

    【算法分析】

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

    【代码】

     1 #include<cstdio>
     2 
     3 using namespace std;
     4 
     5 int m,n,g=0,c[5]= {1,0,-1,0,1};
     6 char jz[999][999];
     7 bool bao[999][999];
     8 
     9 void xb(int,int);
    10 
    11 int main() {
    12     scanf("%d %d
    ",&n,&m);
    13     for(int i=0; i<n; i++)
    14         gets(jz[i]);
    15     for(int i=0; i<n; i++) {
    16         for(int j=0; j<m; j++) {
    17             bao[i][j]=jz[i][j]-'0';
    18         }
    19     }
    20     for(int i=0; i<n; i++) {
    21         for(int j=0; j<m; j++) {
    22             if(bao[i][j]) {
    23                 bao[i][j]=0;
    24                 xb(i,j);
    25                 g++;
    26             }
    27         }
    28     }
    29     printf("%d",g);
    30     return 0;
    31 }
    32 
    33 void xb(int x,int y) {
    34     for(int i=0; i<4; i++) {
    35         if(x+c[i]>-1&&x+c[i]<n&&y+c[i+1]>-1&&y+c[i+1]<m&&bao[x+c[i]][y+c[i+1]]) { //沿细胞的上下左右四个方向搜索细胞
    36             //i==0时,横坐标+1,即为向下搜索;i==1时,纵坐标-1,即为向左搜索;i==2时,横坐标-1,即为向上搜索;i==3时,纵坐标+1,即为向右搜索;
    37             bao[x+c[i]][y+c[i+1]]=0;
    38             xb(x+c[i],y+c[i+1]);
    39         }
    40     }
    41 }

    如果运气好也是错,那我倒愿意错上加错!

    ❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

  • 相关阅读:
    第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用
    trim思考
    国王验毒酒问题
    有人在群里问mysql如何选择性更新部分条件的问题
    有人在群里问 20180222055怎么转20180222-055 这样的问题
    如何下载腾讯视频的视频转为MP4常用格式视频
    天气预报的大雪真的下了
    群友面试的问题 我搞笑的帮忙回答一下
    电台大神打油诗
    ajax简单手写了一个猜拳游戏
  • 原文地址:https://www.cnblogs.com/zxqxwnngztxx/p/6635849.html
Copyright © 2011-2022 走看看