题目描述
一矩形阵列由数字 00 到 99 组成,数字 11 到 99 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。
输入格式
第一行两个整数代表矩阵大小 nn 和 mm。
接下来 nn 行,每行一个长度为 mm 的只含字符
0
到9
的字符串,代表这个 n \times mn×m 的矩阵。输出格式
一行一个整数代表细胞个数。
输入输出样例
输入 #1复制
4 10 0234500067 1034560500 2045600671 0000000089输出 #1复制
4说明/提示
数据规模与约定
对于 100\%100% 的数据,保证 1 \le n,m \le 1001≤n,m≤100。
洛谷P1451
思路:类似油田问题
#include <iostream>
using namespace std;
char p[110][110];
int n,m,ans=0;
int inext[4][2]= {{0,1},{1,0},{0,-1},{-1,0}},book[110][110];
void dfs(int x, int y)
{
for(int i=0; i<4; i++)
{
int tx=x+inext[i][0];
int ty=y+inext[i][1];
if(tx<0||ty<0||tx>=n||ty>=m||book[tx][ty]==1||p[tx][ty]=='0') continue;
book[tx][ty]=1;
dfs(tx,ty);
}
}
int main()
{
cin >> n >> m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
cin >> p[i][j];
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(p[i][j]!='0'&&book[i][j]==0)
{
ans++;
book[i][j]=1;
dfs(i,j);
}
}
}
cout << ans;
}