栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

蓝桥杯:全球变暖

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯:全球变暖

目录

题目描述

输入描述

输入输出样例:

 题目分析:(DFS)

AC代码(Java):


题目描述

你有一张某海域 NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:

.......

.##....

.##....

....##.

..####.

...###.

.......

其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

例如上图中的海域未来会变成如下样子:

.......

.......

.......

.......

....#..

.......

.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

输入描述

第一行包含一个整数 N(1≤N≤1000)。

以下 N 行 N 列代表一张海域照片。

照片保证第 1 行、第 1 列、第 N 行、第 N 列的像素都是海洋。

输出一个整数表示答案。

输入输出样例:

输入

7
.......
.##....
.##....
....##.
..####.
...###.
.......

输出

1

 题目分析:(DFS)

        蓝桥杯(阅读理解杯),首先要看明白题目的要求

        1.给的是一个图,“.”表示海水,"#"表示陆地,根据题目要求,其实只有两种情况,海水和陆地,那么可以考虑用boolean来存放,false为海水,true为陆地

        2.什么是岛屿?一块陆地也可以算一座岛屿,只要它四周都是海水,相连的陆地,周围是海水,那么也只算一块岛屿,明白了这个,再继续往下看

        3.如果一个陆地 上下左右 都是陆地,那么它就肯定不会被淹没。按照这个来看,我们可以把这块陆地叫做 “山”。因为不是山的陆地,周围肯定有海水,按照题目来说,就是肯定会被淹没。

        4.有一种情况(error了两次,就是因为没考虑这个),也就是一块岛屿,被淹没之后,有可能变成了两块岛屿,所以先求所有的岛屿数量,在将这些岛屿进行淹没处理,在计算剩余岛屿数量是行不通的。既然这样,那我们可以换一个思路,我们先拿到图,复制一份,将图中为山的坐标记为true,其余都是海水,然后原始的那张图就正常记录(false是海水,true是陆地),然后遇到陆地,就dfs搜索该块陆地(row,col),如果这块陆地没有和山相连,那么这块岛屿(因为要搜索与这块陆地相连的部分,也可以将这块陆地叫做岛屿,当然,如果这块陆地周围都是水,那么也可以叫做岛屿)中没有山,那么这块岛屿肯定会被沉没,那么我们就返回true,然后记录淹没数量。

        5.具体代码每一步我都写有注释,如果不明白可以讨论区提问,我看到就会回~

AC代码(Java):
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    //创建两个boolean数组,用来存放海域状态(因为海域就只可能有两种状态,海水和陆地),节省空间
    static boolean[][] target,result;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        //target存放海域初始状态
        target = new boolean[N][N];
        for(int row = 0;row 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号