求细胞个数
一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:
阵列 4 10
0234500067
1034560500
2045600671
0000000089
有4个细胞。
【算法分析】
⑴从文件中读入m*n矩阵阵列,将其转换为bool矩阵存入b数组中;
⑵沿b数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
⑶将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑵沿b数组矩阵从上到下,从左到右,找到遇到的第一个细胞;
⑶将细胞的位置入队h,并沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑷将h队的队头出队,沿其上、下、左、右四个方向上的细胞位置入队,入队后的位置b数组置为flase;
⑸重复4,直至h队空为止,则此时找出了一个细胞;
⑹重复2,直至矩阵找不到细胞;
⑺输出找到的细胞数。
⑸重复4,直至h队空为止,则此时找出了一个细胞;
⑹重复2,直至矩阵找不到细胞;
⑺输出找到的细胞数。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[101][101]; 5 int xx[5]={-1,1,0,0}; 6 int yy[5]={0,0,-1,+1}; 7 int tot=0; 8 int n,m; 9 void dfs(int i,int j) 10 { 11 for(int k=0;k<4;k++) 12 { 13 if(i+xx[k]>=1&&j+yy[k]>=1&&i+xx[k]<=n&&j+yy[k]<=m&&a[i+xx[k]][j+yy[k]]==1) 14 { 15 a[i+xx[k]][j+yy[k]]=0; 16 dfs(i+xx[k],j+yy[k]); 17 } 18 } 19 } 20 int main() 21 { 22 char p[101]; 23 cin>>n>>m; 24 for(int i=1;i<=n;i++) 25 { 26 scanf("%s",p); 27 for(int j=1;j<=m;j++) 28 { 29 int d=p[j-1]-48; 30 if(d==0) 31 a[i][j]=0; 32 else 33 a[i][j]=1; 34 } 35 } 36 /*for(int i=1;i<=n;i++) 37 { 38 for(int j=1;j<=m;j++) 39 { 40 int d; 41 cin>>d; 42 if(d!=0) 43 a[i][j]=1; 44 else 45 a[i][j]=0; 46 } 47 }*/ 48 for(int i=1;i<=n;i++) 49 { 50 for(int j=1;j<=m;j++) 51 { 52 if(a[i][j]==1) 53 { 54 a[i][j]=0; 55 dfs(i,j); 56 tot++; 57 } 58 } 59 } 60 cout<<tot; 61 return 0; 62 }
作者:自为风月马前卒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。