找細胞(題解)
題目描述
一矩形陣列由數字00到99組成,數字11到99代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。
輸入格式
第一行兩個整數代表矩陣大小nn和mm。
接下來nn行,每行一個長度為mm的只含字元0
到9
的字串,代表這個n \times mn×m的矩陣。
輸出格式
一行一個整數代表細胞個數。
輸入輸出樣例
輸入 #14 10
0234500067
1034560500
2045600671
0000000089
輸出 #1
4
說明/提示
資料規模與約定
對於100\%100%的資料,保證1 \le n,m \le 1001≤n,m≤100。
#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;
}