求細胞數量
阿新 • • 發佈:2021-06-30
題目
一矩形陣列由數字 \(0\) 到 \(9\) 組成,數字 \(1\) 到 \(9\) 代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。
思路
簡單的BFS。
從\((1,1)\)開始列舉到\((n,m)\),只要其中某一個字元不是0
,那就進行BFS。
BFS流程如下:
- 存入b[1],c[1](分別表示座標x,y)
- 從此處往四個方向列舉並把此處標記為
-1
- 列舉到非零的,重複1,2,3
- 如果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; }