Forever Young

洛谷 P1451 求细胞数量

洛谷 P1451 求细胞数量

题目链接

https://www.luogu.org/problemnew/show/P1451


题目描述

一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。(1<=m,n<=100)


输入输出格式

输入格式:

输入:整数m,n(m行,n列的矩阵) 

输出格式:

输出:细胞的个数


思路

看到很多大佬用搜索,但身为蒟蒻的我只会打暴力,琢磨着就做对了

一开始我没有输出(连零都没有!),然后我就自闭了,有个同学说要有边界条件的判断,于是打上之后,还是不对,发现只需要判断上下左右四个点,于是我又删了另外四个点的判断

然后身为蒟蒻的我就傻傻的通过啦!

虽然时间可能比较多,但是数据水呀!


代码

#include<bits/stdc++.h>
//懒人专用头文件不解释
using namespace std;

int n,m;
char a[101][101];//
int ans=0;

void shensou(int x,int y) {
    //边界条件判断直接返回
    if(x<1||y<1||x>n||y>m) {
        return ;
    }
    //以下是四个点的判断
    //只要不是0都变成0,然后继续搜索
    if(a[x][y+1]!='0') {
        a[x][y+1]='0';
        shensou(x,y+1);
    }
    if(a[x][y-1]!='0') {
        a[x][y-1]='0';
        shensou(x,y-1);
    }
    if(a[x+1][y]!='0') {
        a[x+1][y]='0';
        shensou(x+1,y);
    }
    if(a[x-1][y]!='0') {
        a[x-1][y]='0';
        shensou(x-1,y);
    }
}

int main() {
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            cin>>a[i][j];
            //用字符数组输入,因为没有空格
        }
    }
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            if(a[i][j]!='0') {
                a[i][j]=0;//不是0就变成零
                ans++;
                shensou(i,j);
                //目的是将所有这个细胞中的元素清零
                //这样就可以直接找下一个细胞的某个元素
            }
        }
    }
    printf("%d",ans);//愉快输出答案
    return 0;
}

 

posted @ 2019-04-16 21:00  Loceaner  阅读(379)  评论(0编辑  收藏  举报