第九届 蓝桥 全球变暖 java B组

原创 2018年04月17日 10:27:53

标题:全球变暖
你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。  
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。  
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。  
【输入格式】
第一行包含一个整数N。  (1 <= N <= 1000)  

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

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

  【输出格式】

一个整数表示答案。
【输入样例】

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

【输出样例】

1  

个人感觉从时间复杂度上来看我的这段代码可能不是最优的

程序运行图:


import java.util.Scanner;

public class Main {
public static char[][] assExp;
        public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Scanner scan1 = new Scanner(System.in);
int N = scan.nextInt();
char[][] ass = new char[N][N];
for (int m = 0; m < N; m++) {
String str = scan1.nextLine();
ass[m] = str.toCharArray();
}
//获取一开始的岛屿数
int ini = getNum(ass);
assExp = new char[8][8];
for (int m = 0; m < 8; m++) {
for (int n = 0; n < 8; n++) {
assExp[m][n] = ass[m][n];
}
}
//实现海水淹没功能,用assExp进行判断,每一个‘#’上下左右如果有‘-’即将ass数组的该位置的‘#’变为‘-’
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (assExp[i][j] == '#' && (assExp[i - 1][j] == '-' || assExp[i + 1][j] == '-'
|| assExp[i][j - 1] == '-' || assExp[i][j + 1] == '-')) {
ass[i][j] = '-';
}
}
}
//计算沉没的岛屿数,并打印出来
System.out.print(ini - getNum(ass));
scan.close();
scan1.close();
}
//获取岛屿数
public static int getNum(char[][] ass) {
int Num = 0;
//数组赋值
assExp = new char[8][8];
for (int m = 0; m < 8; m++) {
for (int n = 0; n < 8; n++) {
assExp[m][n] = ass[m][n];
}
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (assExp[i][j] == '#') {
lost(i, j);
Num++;
}
}
}
return Num;
}
//递归,从找到的第一个‘#’开始四周查找(递归查找)并将该位置的‘#’变为‘-’
public static void lost(int x, int y) {
if (assExp[x][y] == '#') {
assExp[x][y] = '-';
}
if (assExp[x + 1][y] == '#') {
lost(x + 1, y);
}
if (x >= 0 && y > 0) {
if (assExp[x][y - 1] == '#') {
lost(x, y - 1);
}
}
if (x > 0 && y >= 0) {
if (assExp[x - 1][y] == '#') {
lost(x - 1, y);
}
}
if (assExp[x][y + 1] == '#') {
lost(x, y + 1);
}
}
}

以太坊区块链实战教学(全球同步升级)

-
  • 1970年01月01日 08:00

20180401第九届蓝桥杯省赛B组真题-9全球变暖

标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##.....##........##...####.....
  • lady_killer9
  • lady_killer9
  • 2018-04-01 16:09:41
  • 188

2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖

2018第九届蓝桥杯C++省赛B组[最新题解汇总]标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##....
  • nka_kun
  • nka_kun
  • 2018-04-01 20:12:39
  • 410

蓝桥杯第九届省赛:第九题 全球变暖

标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##.....##........##...####.....
  • yf224
  • yf224
  • 2018-04-04 11:10:35
  • 165

2018第九届蓝桥杯C++省赛B组[最新题解汇总]

第一题:第几天第二题:明码第三题:乘积尾零第四题:测试次数第五题:快速排序第六题:递增三元组第八题:日志统计第九题:全球变暖第十题:乘积最大...
  • nka_kun
  • nka_kun
  • 2018-04-02 15:10:53
  • 167

2018 蓝桥杯 省赛 B组 原题 C语言B组 第9题 第九届蓝桥杯真题 全球变暖

标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##.....##........##...####.....
  • feifancaicai
  • feifancaicai
  • 2018-04-01 19:20:49
  • 101

第九届蓝桥杯 B

标题:明码汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存...
  • yuewenyao
  • yuewenyao
  • 2018-04-02 20:51:18
  • 14

2014第五届蓝桥杯JAVA本科B组试题及答案

  • 2014年05月05日 19:10
  • 71KB
  • 下载

20180401第九届蓝桥杯省赛B组真题-1第几天

标题:第几天2000年的1月1日,是那一年的第1天。那么,2000年的5月4日,是那一年的第几天?注意:需要提交的是一个整数,不要填写任何多余内容。手算都可以,这里直接粘贴2013年 高斯日记那道题了...
  • lady_killer9
  • lady_killer9
  • 2018-04-01 16:35:40
  • 1587

蓝桥杯——全球变暖

标题:全球变暖你有一张某海域NxN像素的照片,&quot;.&quot;表示海洋、&quot;#&quot;表示陆地,如下所示:........##.....##........##...####.....
  • qq_39020387
  • qq_39020387
  • 2018-04-12 01:34:01
  • 57
收藏助手
不良信息举报
您举报文章:第九届 蓝桥 全球变暖 java B组
举报原因:
原因补充:

(最多只允许输入30个字)