洛谷 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; }