题目描述
一矩形阵列由数字 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。
#include <stdio.h>
#include <string.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
#include<queue>
#pragma warning(disable:4996)
using namespace std;
typedef long long ll;
const int N = 105;
int num = 0;
int n = 0;
int m = 0;
int maze[N][N];
int dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 };
void bfs(int x, int y)
{
queue<pair<int, int>> q;
q.push(make_pair(x,y));
while (q.size())
{
x = q.front().first;
y = q.front().second;
q.pop();
int i = 0;
for (i = 0; i < 4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if (maze[tx][ty] != 0)
{
q.push(make_pair(tx, ty));
maze[tx][ty] = 0;
}
}
}
}
int main()
{
cin >> n >> m;
int i = 0;
int j = 0;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
{
scanf("%1d", &maze[i][j]);
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= m; j++)
{
if (maze[i][j] != 0)
{
num++;
bfs(i, j);
}
}
}
cout << num;
}