全球变暖

标题:全球变暖

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

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

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

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

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

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

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

【输入格式】
第一行包含一个整数N。  (1 <= N <= 1000)
以下N行N列代表一张海域照片。  

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

【输出格式】
一个整数表示答案。

【输入样例】
7
.......
.##....
.##....
....##.
..####.
...###.
.......

【输出样例】
1  

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。

解题思路:

先清除求的是有多少个岛屿会被淹没,而不是最后剩下几个岛屿。

其实问题很简单,只要知道一开始有多少个岛屿,淹没后剩下几个岛屿,相减即是答案。

淹没陆地的操作很简单,扫描陆地,只要满足上下左右四个方向有一个方向上是海,那这片陆地就赋值为海,所以淹没后海域的情况就求出来了。

所以知道一个海域上有几个岛屿是关键,只要解决了这个问题就成功解题了。

求海域上有几个岛屿很DFS即可,扫描整片海域,扫描到一个没有扫描过的陆地像素点,它一定属于某个岛屿,所以岛屿数量+1,

然后以此像素点为起点进行深度(广度)优先搜索,搜索到的每一个陆地像素点都属于此片陆地,所以将其标记为已扫描,扫描结束后继续向下扫描此片海域,扫描到下一个没有已扫描的陆地,岛屿数量再次+1,继续重复上述的操作。

import java.io.IOException;
import java.util.Scanner;

public class Main {

    static int old=0;
    static int now=0;
    static int N;
    static char array[][];
    static char arrayB[][];
    static int x[]={-1,0,1,0};    //上左下右
    static int y[]={0,1,0,-1};

    static void solve(char array[][],int i,int j){
        array[i][j]=‘.‘;
        for(int d=0;d<4;d++){
            int dx=i+x[d];
            int dy=j+y[d];
            if(dx<0 || dy<0 || dx>N-1 || dy>N-1){    //越界判断
                continue;
            }
            if(array[dx][dy]==‘#‘){    //深搜覆盖这个岛屿
                array[dx][dy]=‘.‘;
                solve(array,dx,dy);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        Scanner reader=new Scanner(System.in);
        N=reader.nextInt();
        array=new char[N][N];
        arrayB=new char[N][N];
        for(int i=0;i<N;i++){
            String s=reader.next();
            array[i]=s.toCharArray();
            arrayB[i]=s.toCharArray();
        }
        //第一次扫描
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                if(array[i][j]==‘#‘){
                    old++;
                    solve(array,i,j);
                }
            }
        }
        //淹没陆地
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                if(arrayB[i][j]==‘#‘){
                    if(i-1>=0){
                        if(arrayB[i-1][j]==‘.‘){
                            arrayB[i][j]=‘*‘;
                        }
                    }
                    if(j+1<=N-1){
                        if(arrayB[i][j+1]==‘.‘){
                            arrayB[i][j]=‘*‘;
                        }
                    }
                    if(i+1<=N-1){
                        if(arrayB[i+1][j]==‘.‘){
                            arrayB[i][j]=‘*‘;
                        }
                    }
                    if(j-1>=0){
                        if(arrayB[i][j-1]==‘.‘){
                            arrayB[i][j]=‘*‘;
                        }
                    }
                }
            }
        }
        //第二次扫描
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                if(arrayB[i][j]==‘#‘){
                    now++;
                    solve(arrayB,i,j);
                }
            }
        }
        System.out.println(old-now);
    }
}

原文地址:https://www.cnblogs.com/chiweiming/p/10467293.html

时间: 2024-11-16 04:35:25

全球变暖的相关文章

1682: 全球变暖

题目描述 由于全球变暖,岛国S的沿岸的海水不断上涨,形式岌岌可危. S国的地图是由n*m个网格组成的,网格由.和#组成,#代表的区域是陆地,.和地图外面全是海水. 每天,海水将侵蚀相邻的陆地,即如果陆地与海水相邻的话,第二天就会变成海水.这里面的两块相邻表示两块之间公用一条边. 比如S国的地图是这样的: ..###... ..###... ..###... ...##... ..###### ..###### ...##### 那么一天后,S国就变成了这样: ........ ...#....

《石油,用得完吗》:石油会比较缓慢地被替代。3星

本书是<经济学人>杂志关于石油的未来的5篇文章的合集.文章水平没的说,缺陷是篇幅太小.整体评价3星,值得看一看. 以下是书中一些信息的摘抄,#号是电子书页码,[]中是我的点评. 1:在1898年于纽约举行的第一次国际城市规划会议上,马车带来的粪便是头号议程.然而十年后,粪便问题几乎被市场的无形之手一扫而空.亨利·福特生产了第一款T型车,便宜.快捷而且干净.#49 2:但能源市场有一条经验法则,即改变燃料结构就像是冰川融化般缓慢.#58 3:一百年前,石油被视为环境救星.现在,石油产品愈发沦落为

连续更新了42天早报之后

在已经过去的2016年 11.12月份,我在微信朋友圈上每天早上9:30之前更新一则早报,每则早报共11条,其中1-10条为最新的国际.社会资讯,第10条为文艺范文字.诸如以下类型: 11月24日早!读报时间: 1.外媒:惊叹中国30年内消灭极度贫困:曾是世界最穷国 2.美媒:中国经销商阻奥迪上汽联姻 索数千亿赔偿 3.求学:陆生赴台求学骤减16% 若非理想学校就放弃 4.德媒:中国人吃肉增多不仅影响健康 导致全球变暖 5.统计:中国家庭财富缩水至23万亿美元 全球排名第三 6.消息:香港迪士尼

程序员教流浪汉编程,开发APP

panpan @ 2013.10.05 , 09:34 am 一天,Patrick McConlogue宣布他将要教一个流浪汉学Java语言,帮助他开发一个属于他自己的app.今年23岁的Patrick是一名软件工程师,每天在去上班的路上他都会遇见那个流浪汉,然后他就决定践行自己的一个主意,看看他会不会是那个人. “这个主意很简单.”Patrick在自己的网站上写道: 1.我明天再路过时给你100美元.2.我明天再路过时给你三本JavaScript教程(入门级.高级.专家级)和一台便宜的笔记本.

万万没想到用理工科思维理解世界-摘录

万万没想到用理工科思维理解世界-万维钢(同人于野)著 第一章 怎样杀死海星 传统组织就如同蜘蛛,它的智力集中在大脑,只要你把蜘蛛的头去掉,蜘蛛就会死亡.而去中心化组织就如同海星,海星根本就没有头.它的智能分布在身体各处,一旦你打掉它身体的一部分,那个部分甚至可能自己再长成另一个海星. 不过去中心化组织有个关键的弱点:你很难通过这样的组织赚大钱.分权的产业利润低,只有集权才能获得高利润. 怎样杀死海星?<海星与蜘蛛>给了三个策略. 第一个策略是改变环境.既然你们是靠一种意识形态联系在一起,我就让

《消失的微生物》:微生物研究权威的建议:除非万不得己,请谢绝抗生素。4星

作者是美国微生物学教授,美国医学院院士.可以认为是微生物研究的权威.作者依据自己和同行们的研究成果,认为抗生素使用导致的微生物的减少或消失,可能是以下现代病的重要原因:肥胖.青少年糖尿病.哮喘.过敏等. 作者的结论足够惊人.结论是否成立,不能看这本面对公众的科普书,要看作者和他的全世界的同行们能不能达成一致,要看作者的反方科学家能不能提出有力的反驳,要看作者和他的同行们能不能说服各国政府采取行动. 书后1/4的内容是信息来源的标注.这也是作者是严肃的学者的一个证据. 以下是书中一些信息的摘抄:

学会提问(尼尔&#183;布朗、斯图尔特&#183;基利)

Day1 1.批判性思维 作者认为,批判性思维有三个方面: (1)有一套相互关联.环环相扣的关键问题的意识: (2)恰如其分地提出和回答关键问题的意识: (3)积极主动地利用关键问题的强烈愿望. 2.两种思维方式 被动式思维和主动式思维,也可以称为海绵式思维和淘金式思维. 被动式思维——就像海绵,照单全收,主要运用记忆能力,狂抄狂背狂记,并且对脑海里的东西深信不疑 主动式思维——就像淘金,不仅动用记忆里,还要动用推理分析能力,不断质疑接收到的信息,筛选最有效的信息. 前者强调单纯的知识获取结果,

[学习]高考地理

|来自:https://www.zhihu.com/question/38747854 黄土高原水土流失的原因 土壤--土质疏松,垂直节理发育,易被流水侵蚀. 降水--夏季降水集中,且多暴雨,流水侵蚀严重. 植被--植被覆盖率低,对地面保护性差. 地形--位于山地和平原的过渡带,坡度较大.保持水土能力差. 人为--1.过度乱砍乱伐和放牧,导致环境破坏和荒漠化严重.2.不合理的耕作制度. 3.水资源不合理利用.4.工矿建设破坏环境植被.5.人口剧增,人地矛盾. 西北地区荒漠化的原因 深居内陆距海遥

Mac OS X 背后的故事

Mac OS X 背后的故事 作者: 王越  来源: <程序员>  发布时间: 2013-01-22 10:55  阅读: 25840 次  推荐: 49   原文链接   [收藏] 作者王越,美国宾夕法尼亚大学计算机系研究生,中国著名 TeX 开发者,非著名 OpenFOAM 开发者. Mac OS X 背后的故事(一)力挽狂澜的Ellen Hancock Mac OS X 背后的故事(二)Linus Torvalds的短视 Mac OS X 背后的故事(三)Mach之父Avie Tevan