【题目】
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:
阵列
有4个细胞。
【算法分析】
⑴从文件中读入m*n矩阵阵列,将其转换为bool矩阵存入b数组中;
⑵沿b数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
⑶将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑵沿b数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
⑶将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑷将h队的队头出队,沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑸重复4,直至h队空为止,则此时找出了一个细胞;
⑹重复2,直至矩阵找不到细胞;
⑺输出找到的细胞数。
⑸重复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 }