#include<stdio.h>
#include<string.h>
int main() {
freopen("C:\\input.txt","r",stdin);
int n;
int a[20][20] = {0};
int mark[20][4];
memset(mark, -1, 20 * 4 * sizeof(int));
scanf("%d", &n);
int i, j;
int area = 0;
for (i = 0;i < n;i++)
{
for (j = 0;j < n;j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = 0;i < n;i++)
{
for (j = 0;j < n;j++)
{
if (a[i][j] == 1)
{
if (mark[i][0] == -1) mark[i][0] = j;//
if (mark[j][2] == -1) mark[j][2] = i;
mark[i][1] = j;
mark[j][3] = i;
}
}
}
for (i = 0;i < n;i++)
{
for (j = 0;j <n;j++)
{
if (a[i][j] == 0&&i>mark[i][0]&&i<mark[i][1]&&j>mark[j][2]&&j<mark[i][3])
area++;
}
}
printf("%d\n", area);
return 0;
}
行i里面要存最先出现的1和最后出现的1,通过判断是不是初始值来保存前者,由于最后的数字总会覆盖,所以直接保存就可以得到最后一个数字的坐标。
列j同理