1. 程式人生 > >luogu P1451 求細胞數量

luogu P1451 求細胞數量

getchar() scan style tchar 輸出 space pty ons pla

P1451 求細胞數量

題目描述

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

輸入輸出格式

輸入格式:

輸入:整數m,n(m行,n列)

矩陣

輸出格式:

輸出:細胞的個數

輸入輸出樣例

輸入樣例#1:
4  10
0234500067
1034560500
2045600671
0000000089
輸出樣例#1:
4
#include<iostream>
#include<cstdio>
#include<cmath>
#include
<algorithm> #include<cstring> #include<string> #include<queue> using namespace std; const int N=101; const int xd[]={0,-1,0,1}; const int yd[]={-1,0,1,0}; struct node{ int x,y; }now,top,nxt; int a[N][N]; bool vis[N][N]; int answer; int n,m; queue<node>q; inline int read() {
int x=0;char c=getchar(); while(c<0||c>9)c=getchar(); return x=c-0; } inline void bfs(int x,int y) { answer++; now.x=x; now.y=y; q.push(now); vis[x][y]=1; while(!q.empty()) { top=q.front(); q.pop(); for(int i=0;i<4;i++) {
int xx=xd[i]+top.x; int yy=yd[i]+top.y; if(a[xx][yy]&&xx>0&&xx<=n&&yy>0&&yy<=m) { a[xx][yy]=0; nxt.x=xx; nxt.y=yy; q.push(nxt); } } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]) bfs(i,j); printf("%d",answer); return 0; }

luogu P1451 求細胞數量