肿瘤大小

在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0 表示。其它肿瘤内和肿瘤外的点都用255 表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。

输出一行,该行包含一个整数,为要求的肿瘤内的像素点的个数。

样例输入:
255 255 255 255 255
255 0 0 0 255
255 0 255 0 255
255 0 0 0 255
255 255 255 255 255
样例输出:1

利用数组储存区域,遍历各点,找出符合条件的区域。

#include <stdio.h>
main()
{
	int zl[500][500];
	int n;
	int A,B,R1,C1,R2,C2,C,D;
	scanf("%d", &n);
	if(n<3)
	printf("0\n");
	else
	for (A = 1; A <= n; A++)
	{
		for (B = 1; B <= n; B++)
		{
			scanf("%d", &zl[A][B]);
		}
	}
	
	for (A = 1; A < n; A++)
	{
		for (B = 1; B < n; B++)
		{
			if (zl[A][B] == 0 )
			{
				R1=A;C1=B;break;
			}
		}
		if (zl[A][B] == 0 )
		{
			break;
		}
	}
	
	for (A = n; A > 1; A--)
	{
		for (B = n; B > 1; B--)
		{
			if (zl[A][B] == 0 )
			{
				R2=A;C2=B;break;
			}
		}
		if (zl[A][B] == 0 )
		{
			break;
		}
	}
	
	C=R2-R1-1;
	D=C2-C1-1;
	
	printf("%d", C*D);
}

运行结果:

肿瘤大小