[BFS]細胞問題

細胞問題


題目描述
一矩形陣列由數字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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章