1. 程式人生 > 其它 >求細胞數量

求細胞數量

題目

一矩形陣列由數字 \(0\)\(9\) 組成,數字 \(1\)\(9\) 代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。

思路

簡單的BFS。
\((1,1)\)開始列舉到\((n,m)\),只要其中某一個字元不是0,那就進行BFS。
BFS流程如下:

  1. 存入b[1],c[1](分別表示座標x,y)
  2. 從此處往四個方向列舉並把此處標記為-1
  3. 列舉到非零的,重複1,2,3
  4. 如果l>r,退出
  • 寫的有點草了,要有一定BFS的基礎才能看懂

程式碼

#include<bits/stdc++.h>
using namespace std;

int n,m,ans,a[104][104];
char ch;
int b[10004],c[10004];
int di[5]={0,-1,0,0,1};
int dj[5]={0,0,-1,1,0};
void bfs(int x,int y)
{
	int l=1,r=1;
	b[1]=x;c[1]=y;
	while(l<=r)
	{
		for(int k=1;k<=4;k++)
		{
			int xx=b[l]+di[k],yy=c[l]+dj[k];
			if(a[xx][yy]<=0 || xx<1 || xx>n || yy<1 || yy>m)continue;
			r++;
			a[xx][yy]=-1;
			b[r]=xx;c[r]=yy;
			// cout<<xx<<" "<<yy<<endl;
		}
		l++;
	}
	if(r>=1)ans++;
	// cout<<r<<endl;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>ch,a[i][j]=ch-'0';
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(a[i][j]>0)
				/*cout<<i<<" "<<j<<endl,*/bfs(i,j);
	cout<<ans;

	return 0;
}