細胞問題
題目描述
一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義爲沿細胞數字上下左右若還是細胞數字則爲同一細胞,求給定矩形陣列的細胞個數。(1<=m,n<=100)?
輸入格式
輸入:整數m,n(m行,n列)
矩陣
輸出格式
輸出:細胞的個數
輸入輸出樣例
輸入 #1
4 10
0234500067
1034560500
2045600671
0000000089
輸出 #1
4
代碼
#include<stdio.h>
#include<iostream>
using namespace std;
bool f[10005][10005]={false};
int n,m,a[11005][11005],ans=0,st[10005][3];
const int dx[5]={0,0,0,1,-1};
const int dy[5]={0,1,-1,0,0}; //四個方向
void bfs(int i,int j){
int head=0,tail=1; //每次head清0,tail清1
st[1][1]=i;st[1][2]=j;f[i][j]=1;
ans++;
do{
head++;
for(int i=1;i<=4;i++){
int x=st[head][1]+dx[i];
int y=st[head][2]+dy[i];
if(!f[x][y]) //判斷有沒有用過
if(a[x][y]!=0) //判斷是不是細胞數字
if(x>=1&&x<=n&&y>=1&&y<=m){
tail++;
st[tail][1]=x;
st[tail][2]=y;
f[x][y]=true; //標記
}
}
}while(head<=tail);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%1d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) //一個一個枚舉
if(a[i][j]!=0 and !f[i][j])bfs(i,j);
printf("%d",ans);
return 0;
}