题目描述
一矩形阵列由数字 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;
}









