一本通 1329:【例8.2】细胞

【题目描述】

一矩形阵列由数字0到9组成,数字11到99代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。如:

阵列

4 10
0234500067
1034560500
2045600671
0000000089

有44个细胞。

【输入】

第一行为矩阵的行n和列m;

下面为一个n×m的矩阵。

【输出】

细胞个数。

【输入样例】

4 10
0234500067
1034560500
2045600671
0000000089

【输出样例】

4
#include
#include
#include
char a[100][100];
int num = 0;
int dir[][2] = { {1,0},{-1,0},{0,1},{0,-1} };
int m, n;
struct node
{
	int x;
	int y;
}q[10000];
void bfs(int xa, int ya)
{
	num++;
	int head = 1, tail = 1;
	q[tail].x = xa;
	q[tail].y = ya;
	tail++;
	while (head < tail)
	{
		int x = q[head].x;
		int y = q[head].y;
		for (int i = 0; i < 4; i++)
		{
			int nx = x + dir[i][0];
			int ny = y + dir[i][1];
			if (nx >= 0 && nx < m && ny >= 0 && ny < n && a[nx][ny] != '0')
			{
				q[tail].x = nx;
				q[tail].y = ny;
				a[nx][ny] = '0';
				tail++;
			}
		}
		head++;
	}
}
int main()
{
	scanf("%d%d", &m, &n);
	for (int i = 0; i < m; i++)
	{
		scanf("%s", a[i]);
	}
	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (a[i][j] != '0')
			{
				bfs(i, j);
			}
		}
	}
	printf("%d\n", num);
	return 0;
}

你可能感兴趣的:(一本通系列,c语言,深度搜索,算法)