题目描述
一矩形阵列由数字 0 到 9组成,数字 1 到 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入格式
第一行两个整数代表矩阵大小 𝑛和 𝑚。
接下来 𝑛行,每行一个长度为 𝑚 的只含字符 0
到 9
的字符串,代表这个 𝑛×𝑚 的矩阵。
输出格式
一行一个整数代表细胞个数。
输入输出样例
输入 #1复制
4 10 0234500067 1034560500 2045600671 0000000089
输出 #1复制
4
说明/提示
数据规模与约定
对于 100%的数据,保证 1≤𝑛,𝑚≤100。
AC代码
#include<bits/stdc++.h>
using namespace std;
char a[1000][1000];
bool d[1000][1000];
int n,m;
int nxt[4][2]={
{0,1},
{0,-1},
{1,0},
{-1,0},
};
struct p{
int x;
int y;
};
void f(int x,int y){
deque<p> q;
p start;
start.x=x;
start.y=y;
q.push_back(start);
d[x][y]=1;
while(q.empty()==false){
p now;
now=q.front();
for(int i=0;i<4;i++){
p now_nxt;
now_nxt.x=now.x+nxt[i][0];
now_nxt.y=now.y+nxt[i][1];
if(
now_nxt.x>=0&&now_nxt.x<n&&
now_nxt.y>=0&&now_nxt.y<m&&
a[now_nxt.x][now_nxt.y]!='0'&&
d[now_nxt.x][now_nxt.y]==false
){
d[now_nxt.x][now_nxt.y]=true;
q.push_back(now_nxt);
}
}
q.pop_front();
}
}
int main(){
scanf("%d%d",&n,&m);
int s=0;
for(int i=0;i<n;i++){
scanf("\n");
for(int j=0;j<m;j++){
scanf("%c",&a[i][j]);
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(d[i][j]==false&&a[i][j]!='0'){
f(i,j);
s++;
}
}
}
printf("%d",s);
return 0;
}