第九届蓝桥杯第九题 全球变暖

题目描述
你有一张某海域NxN像素的照片,".“表示海洋、”#"表示陆地,如下所示:
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体
来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
【输入格式】
第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。
【输出格式】
一个整数表示答案。
【输入样例】
【输出样例】
…
.##…
.##…
…##.
…####.
…###........
.......
.......
.......
....#..
.......
.......
7
.......
.##....
.##....
....##.
..####.
...###.
.......
1

思路:首先我们要读清题意是问完全被淹没 所以只要岛屿有一块陆地没有被淹没就不算完全淹没,然后我们就要找总共有多少岛屿 在判断每个岛屿有几个陆地没有被淹没
代码:

#include<stdio.h>
char t[1010][1010];
int next[4][2]= {{0,1},{0,-1},{1,0},{-1,0}},book[10011],baak[10101][1010],n;
int my2(int a,int b)//这个函数是判断一个陆地四周有没有海洋从而判断它是否会被淹没
{
	if(t[a-1][b]=='.'||t[a][b-1]=='.'||t[a+1][b]=='.'||t[a][b+1]=='.')
	{
		return 0;//如果有返回0
	}
	return 1;//无返回1;
}
void my(int x,int y,int l)
{
	int k,tx,ty;
	t[x][y]='*';//每走过一个点就把它换为*,防止重复
	for(k=0; k<4; k++)//往四个方向寻找
	{
		tx=x+next[k][0];
		ty=y+next[k][1];
		if(tx>=0&&tx<n&&ty>=0&&ty<n&&t[tx][ty]=='#')
		{
			baak[tx][ty]=1;
			if(my2(tx,ty))//如果这块陆地没有被淹没,就让这个岛屿对应的book数组加一;
			{
				book[l]++;
			}
			my(tx,ty,l);//接着找下一个点
		}
	}

	return;
}
int main()
{
	int i,j,l=0,sum=0;//l的用处是判断总共有几个岛屿
	scanf("%d",&n);
	for(i=0; i<n; i++)
	{
		scanf("%s",t[i]);
	}
	for(i=0; i<n; i++)
	{
		for(j=0; j<n; j++)
		{
			if(t[i][j]=='#')
			{
				my(i,j,l);
				l++;
			}
		}
	}
	for(i=0; i<l; i++)
	{
		if(book[i]==0)//如果这个岛屿对应的数组为零 那么就意味它每一块陆地都被淹没了
		{
			sum++;
		}
	}
	printf("%d",sum);//sum就是最后答案
	return 0;
}
/*

.......
.##....
.##....
....##.
..####.
...###.
.......

*/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值