12-2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<ctype.h>

struct node
{
	int lmark,rmark,umark,dmark;//矩阵中每个数它的上下左右有没有1的标记 有则1 无则0  初始位0
	int value;//矩阵中的数字 0或者1
}m[1000][1000];//结构体类型的矩阵

int main()
{
	int N;
	while(scanf("%d",&N)!=EOF)
	{
		int i,j;
		for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
			{
				scanf("%d",&m[i][j].value);//输入
				m[i][j].lmark=0;//初始化左右上下标记位
				m[i][j].rmark=0;
				m[i][j].umark=0;
				m[i][j].dmark=0;
			}
		}

		int k,sum=0;//sum是小岛面积,k用于比较循环
		for(i=1;i<N-1;i++)
		{
			for(j=1;j<N-1;j++)
			{
				if(m[i][j].value==0)//若是小岛部分不是海岸线则看是否有上下左右标记即海岸线
				{
					for(k=0;k<j;k++)//左海岸线
					{
						if(m[i][k].value==1)
						{
							m[i][j].lmark=1;
						//	m[i][j].rmark=1;
						//	m[i][j].umark=1;
						//	m[i][j].dmark=1;
						}
					}
					for(k=j+1;k<N;k++)//右海岸线
					{
						if(m[i][k].value==1)
						{
						//	m[i][j].lmark=1;
							m[i][j].rmark=1;
						//	m[i][j].umark=1;
						//	m[i][j].dmark=1;
						}
					}
					for(k=0;k<i;k++)//上海岸线
					{
						if(m[k][j].value==1)
						{
						//	m[i][j].lmark=1;
						//	m[i][j].rmark=1;
							m[i][j].umark=1;
						//	m[i][j].dmark=1;
						}
					}
					for(k=i+1;k<N;k++)//下海岸线
					{
						if(m[k][j].value==1)
						{
						//	m[i][j].lmark=1;
						//	m[i][j].rmark=1;
						//	m[i][j].umark=1;
							m[i][j].dmark=1;
						}
					}
					//若上下左右都有海岸线 则算入小岛面积
					if(m[i][j].lmark&&m[i][j].rmark&&m[i][j].umark&&m[i][j].dmark)
						sum++;
				}
			}
		}
		printf("%d\n",sum);
	}
	return 0;
}


输出//只测试了样例 可能存在未知bug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值