#include <bits/stdc++.h>
using namespace std;
int idx[51][81],m,n,ans = 0;
char a[51][81];
void dfs(int x,int y,int id){
if (x < 0 || x >= m || y < 0 || y >= n) return;
if (idx[x][y] > 0 || a[x][y] == '0') return;
idx[x][y] = id;
dfs(x - 1,y,id);
dfs(x + 1,y,id);
dfs(x,y + 1,id);
dfs(x,y - 1,id);
}
int main()
{
memset(a,0,sizeof(a));
memset(idx,0,sizeof(idx));
cin >> m >> n;
for (int i = 0;i < m;i++)
{
cin >> a[i];
}
int cnt = 0;
for (int i = 0;i < m;i++)
{
for (int j = 0;j < n;j++)
{
if (idx[i][j] == 0 && a[i][j] != '0')
{
dfs(i,j,++cnt);
}
}
}
cout << cnt;
return 0;
}
题目来源于:求细胞数量 - 洛谷
http://218.5.5.242:9018/JudgeOnline/problem.php?id=1152
题目描述
一矩形阵列由数字 0 到 9 组成,数字 1到 9代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入格式
第一行两个整数代表矩阵大小 n和m。
接下来 n 行,每行一个长度为 m的只含字符 0
到 9
的字符串,代表这个 n×m的矩阵。
输出格式
一行一个整数代表细胞个数。
输入输出样例
输入 #1复制
4 10 0234500067 1034560500 2045600671 0000000089
输出 #1复制
4
说明/提示
数据规模与约定
对于 100% 的数据,保证 1≤n,m≤100。