1. 程式人生 > 實用技巧 >找細胞(題解)

找細胞(題解)

題目描述

一矩形陣列由數字00到99組成,數字11到99代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。

輸入格式

第一行兩個整數代表矩陣大小nn和mm。

接下來nn行,每行一個長度為mm的只含字元09的字串,代表這個n \times mn×m的矩陣。

輸出格式

一行一個整數代表細胞個數。

輸入輸出樣例

輸入 #1
4 10
0234500067
1034560500
2045600671
0000000089
輸出 #1
4

說明/提示

資料規模與約定

對於100\%100%的資料,保證1 \le n,m \le 1001n,m100。

#include <iostream>

#include <cstdio>

using namespace std;

void dfs(int x,int y);

int n,m;

char a[105][105];

int dx[4]={-1,0,1,0};//方向

int dy[4]={0,1,0,-1};//方向

int ans;

void dfs(int x,int y)

{

if(a[x][y]-'0'==0) return;

else{

if(x>=0 && x<n && y>=0 && y<m)

{

a[x][y]='0';

for(int i=0;i<4;i++)

dfs(x+dx[i],y+dy[i]);

}

}

return;//越界,則不滿足,return。這和其他程式碼把越界結束的條件放在之前是一樣的(放在之前這裡就沒有return了)

}

int main()

{

scanf("%d%d",&n,&m);

for(int i=0;i<n;i++)

{

cin>>a[i];

}

for(int i=0;i<n;i++)

{

for(int j=0;j<m;j++)

{

if(a[i][j]-'0'!=0)

{

dfs(i,j);

ans++;

}

}

}

cout<<ans;

return 0;

}