题目描述
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:
阵列
4 10
0234500067
1034560500
2045600671
0000000089
有4个细胞。
输入
第一行为矩阵的行n和列m;
下面为一个n×m的矩阵。
输出
细胞个数。
输入样例
4 10
0234500067
1034560500
2045600671
0000000089
输出样例
4
代码
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
void Judge(int& i,int& j); //得到cell[i][j]不为0的位置
int n,m,number=0;
int cell[100][100];
int main(void){
char ch;
cin>>n>>m;
n++;m++;
memset(cell,0,sizeof(cell));
queue<int>num_cell; //储存位置,i与j的值
for(int i=1;i<n;i++)
for(int j=1;j<m;j++){
cin>>ch;
cell[i][j]=ch-'0';
}
do{
int i,j;
Judge(i,j);
if(i==n&&j==m){
cout<<number<<endl;
return 0;
}
num_cell.push(i);
num_cell.push(j);
do{
i=num_cell.front();
num_cell.pop();
j=num_cell.front();
num_cell.pop();
cell[i][j]=0; //每次入栈的位置的值都要置为零为下一次遍历做准备
if(cell[i-1][j]!=0){
num_cell.push(i-1);
num_cell.push(j);
}
if(i+1<n&&cell[i+1][j]!=0){
num_cell.push(i+1);
num_cell.push(j);
}
if(cell[i][j-1]!=0){
num_cell.push(i);
num_cell.push(j-1);
}
if(j+1<m&&cell[i][j+1]!=0){
num_cell.push(i);
num_cell.push(j+1);
}
}while(!num_cell.empty());
number++;
}while(true);
return 0;
}
void Judge(int& i,int& j){
for(i=1;i<n;i++)
for(j=1;j<m;j++)
if(cell[i][j]!=0)
return;
}