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

.......
.##....
.##....
....##.
..####.
...###.
.......
输出样例

我拿到这题肯定知道是搜索,但是题目的意思让我匪夷所思,后来慢慢才懂题目的意思。懂了之后,和大多数人的想法一样,两遍dfs搜索找遍全球变暖前后的岛屿数然后相减就是最后的答案。

有篇博主的答案给的代码让我觉得他的想法挺惊艳的,既然求照片中有多少岛屿会被完全淹没,那么只需要找出那些在搜索过程中岛屿上的土地周围都存在海水的岛屿就好了,至于其他有那种四周都有土地的岛屿,它最后只剩一块土地也好,它分成2,3个岛屿也罢,我都不需要去管

另外,那个源代码有挺多问题的,我改了一下,开始没注意到边界问题,程序直接崩了

#include<iostream>
#include<cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int n;
char map[][];
int ans[];
int vis[][]; void dfs(int x, int y, int k)
{
if(map[x][y]=='.'||vis[x][y]||x<||y<||x>=n||y>=n)
return;
vis[x][y]=;
if(map[x-][y]=='#'&&map[x+][y]=='#'&&map[x][y-]=='#'&&map[x][y+]=='#')
ans[k]++;
dfs(x+, y, k);
dfs(x-, y, k);
dfs(x, y-, k);
dfs(x, y+, k);
}
int main()
{
memset(vis, , sizeof(vis));
scanf("%d", &n);
for(int i = ; i < n; i++)
scanf("%s", &map[i]); int cnt=;
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
if(map[i][j]=='#'&&!vis[i][j]) {
dfs(i, j, cnt);
cnt++;
}
}
} int sum=;
for(int i = ; i < cnt; i++)
if(ans[i]==)
sum++;
printf("%d\n",sum); return ;
}

参考自:https://www.cnblogs.com/flightless/p/8718443.html

最新文章

  1. [LeetCode] Wiggle Sort II 摆动排序
  2. 洛谷 P1378 油滴扩展 Label:搜索
  3. !important
  4. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)
  5. JavaScript的DOM操作-非重点部分
  6. 标准DSO设置
  7. C++pair类型
  8. C#操作txt问件,进行清空添加操作
  9. __set()与__get() 魔术方法
  10. Struts2.0 去掉action后缀名
  11. ajaxfileupload
  12. java通过JNI接口调用C语言-初级
  13. 【6】和作为连续序列s
  14. python-关于字典与列表的一个作业
  15. python3 正则表达式点星问号(.*?)能不能匹配换行符?不能的话应该怎么写
  16. 2555: SubString[LCT+SAM]
  17. php 截取字符串第一个字符,截取掉字符串最后一个字符的方法
  18. 前端入门html(表单)
  19. C 指向指针的指针
  20. css弹性盒子

热门文章

  1. test判断条件
  2. QSqlRelationalTableModel的Select语句会改变列的名字
  3. Hadoop起步之图解SSH、免密登录原理和实现
  4. Codeforces Round #563 (Div. 2)C
  5. Selenium驱动如何选择?
  6. 爱,死亡和机器人(Love,Death&amp;Robots)
  7. Codeforces Gym101518H:No Smoking, Please(最小割)
  8. java 学习之路第一节
  9. lleetcode 1 two sum c++
  10. Django rest framework(4)----版本