时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 256M,其他语言512M
来源:牛客网 金山办公2020校招服务端开发工程师笔试题(一)

题目描述

给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。

输入描述:

第一行输入两个数字n,m(1<=n<=200,1<=m<=200)
后面n行01序列,每一行m个字符,表示陆地和海洋

输出描述:

输出一个数字表示岛屿的个数


示例1

输入

5 5
11000
01011
00011
00000
00111

输出

3

解题思路

  • 这里我提供的AC代码不是最优的,不算很简洁,因为这是基于我上一篇文章“统计岛屿个数”题目改编的代码。
  • 我用到的算法是DFS。
  • 了解有关DFS的内容:深度优先搜索解决连通块/染色问题——求岛的个数
  • 这题不同的是,输入数据的时候没有空格,虽然可以存成char[]字符串形式,但是我用了另一种较为复杂的方法实现。(就是懒得改了。)

题解

#include<stdio.h>
struct note
{int x;int y;
};
struct note que[400];
int head, tail;
int a[2000][2000];//地图
int book[2000][2000];
int next[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int max = 0;
int sum = 0;
int n, m, startx, starty;void dfs(int x, int y, int color)
{int k;int tx, ty;a[x][y] = color; // 对本格子染色for (k = 0; k < 4; k++){tx = x + next[k][0];ty = y + next[k][1];if (tx < 1 || tx > n || ty < 1 || ty > m)continue;if (a[tx][ty] > 0 && book[tx][ty] == 0){book[tx][ty] = 1;dfs(tx, ty, color);}}return;
}int main()
{int i, j;int num = 0;char c;scanf("%d %d", &n, &m);getchar();for (i = 1; i <= n; i++){for (j = 1; j <= m; j++){c = getchar();a[i][j] = c - '0';}getchar();}for (i = 1; i <= n; i++){for (j = 1; j <= m; j++){if (a[i][j] > 0){num--;// num表示色号,并且是负数book[i][j] = 1;dfs(i, j, num);}}}printf("%d", -num);return 0;
}

[C] [编程题]连通块(DFS解决)相关推荐

  1. 1335:【例2-4】连通块——dfs、bfs

    [题目描述] 一个n × m的方格图,一些格子被涂成了黑色,在方格图中被标为1,白色格子标为0.问有多少个四连通的黑色格子连通块.四连通的黑色格子连通块指的是一片由黑色格子组成的区域,其中的每个黑色格 ...

  2. Multiplayer Moo[ [ 并查集+dfs连通块 ] / [ dfs ] ]

    题目链接 题目描述: The cows have come up with a creative new game, surprisingly giving it the least creative ...

  3. 【DFS专题训练】踏青 C++程序题 连通块问题

    题目描述 小白和他的朋友周末相约去召唤师峡谷踏青.他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地.草丛通过上下左右 4 个方向扩展其他草丛形成一片草地,任何一片草地中的格 ...

  4. 编程题记录(未解决)

    题目描述: 有一堆大小为整数MB的文件,现在需要将文件存储到光盘,一张光盘可存储容量为700MB,计算存储所有文件需要的最小光盘数. 函数定义: int min_disk(int *file, int ...

  5. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

  6. HDU - 1547 Bubble Shooter(dfs+连通块+模拟)

    题目链接:点击查看 题目大意:模拟泡泡枪游戏,问当击破指定位置的泡泡时,能有多少个泡泡同时爆炸? 题目分析:一个中规中矩的连通块问题,只不过在向四周扩散的时候需要注意的是,奇数行和偶数行的方向有点不一 ...

  7. 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)

    题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域 ...

  8. UVa572 Oil Deposits DFS求连通块

    技巧:遍历8个方向 for(int dr = -1; dr <= 1; dr++)for(int dc = -1; dc <= 1; dc++)if(dr != 0 || dc != 0) ...

  9. DFS求连通块数目(深搜)

    DFS求连通块数目 这里认为,连通块是包括斜对角线的路径连通的块. 测试数据 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 计算通过@相连的连通块的个数 测试输出: 2 样例代码 ...

最新文章

  1. yum 自动使用光盘和网络源
  2. [转]计算机学习道路
  3. 类属性-类属性的定义及使用
  4. matlab应用大全二手,MATLAB应用大全(附光盘)-JobPlus
  5. React with Webpack - 3: 内联image、font
  6. Asp.net基础概念之 事件
  7. 听云数据库管理平台NetopGO简介
  8. php连接db2失败,PHP_浅谈DB2数据库故障处理及最佳实践,  当你在使用数据库时,可 - phpStudy...
  9. discuz点歌台插件
  10. 不如跳舞!伯克利的舞蹈动作迁移效果逆天
  11. php mysql 跨库_PHP使用PDO进行跨数据库操作
  12. 整理了70个Python实战项目列表,都有完整且详细的教程
  13. 单元测试--Mockito之spy
  14. 用计算机弹出晴空,宠物小精灵之晴空之翼
  15. Python之温度转换
  16. 轻松停车入位 淑女节女司机5大用车指南
  17. 微店开放平台接入指南
  18. STM32CubeMX生成工程失败
  19. 移动互联网如何改变了外卖行业
  20. 【计算机视觉40例】案例40:识别性别与年龄

热门文章

  1. 数据结构与算法之美day 6: 如何实现LRU缓存淘汰算法?
  2. Cobalt Strike 的安装与简单使用
  3. 如何通过HTTP优雅调用第三方-Feign
  4. 第一个SpringBoot程序(详细解析Grounp、Artifact等项目信息含义)
  5. JIT Code Generation代码生成
  6. GPU加速库AmgX
  7. Python分析离散心率信号(下)
  8. 使嵌入式系统调试更容易:有用的硬件和软件提示
  9. 2021年大数据Spark(十七):Spark Core的RDD持久化
  10. Django 模型成员2.2