864. 二维数组区块计数

输入一个只包含0和1的二维数组,上下左右和对角相邻的1组成一个区块,0不形成区块,求数组中的区块个数。

输入格式

第一行输入两个正整数N和M,N表示数组行数,M表示数组列数。

接下来N行,每行表示数组对应的一行,每行包含M个整数,整数之间用空格隔开。

输出格式

输出一个整数,表示数组中区块的个数。

数据范围

0≤N,M,N∗M≤1060≤N,M,N∗M≤106

输入样例:

3 3
0 1 0
1 0 0
1 0 1

输出样例:

2

样例解释

数组右下角的1单独构成一个区块,其他的3个1对角或上下相邻,构成另一个区块。

思路:

直接bfs,染色找。

代码:

#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
using namespace std;
#define ll long long
const ll mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int maxn = 1e6+100;
int a[maxn];
bool vis[maxn];
int n, m;
int dx[8] = { 0,0,1,1,1,-1,-1,-1};
int dy[8] = { 1,-1,0,1,-1,0,-1,1};struct node
{int x, y;
};
void bfs(int x, int y) {node st;st.x = x;st.y = y;queue<node>Q;Q.push(st);while (!Q.empty()) {node u = Q.front();Q.pop();int id = u.x*m + u.y ;vis[id] = true;for (int i = 0;i < 8;++i) {int x = u.x + dx[i];int y = u.y + dy[i];int v_id = x*m + y;if (x >= 0 && x < n&&y >= 0 && y < m && 1 == a[v_id] && !vis[v_id]) {node v;v.x = x;v.y = y;Q.push(v);}}}
}
int main() {cin >> n >> m;for (int i = 0;i < n;++i) {for (int j = 0;j < m;++j) {scanf("%d",&a[i*m+j]);   }}int ret = 0;for (int i = 0;i < n;++i) {for (int j = 0;j < m;++j) {int id = i*m + j;if (a[id] == 1 && !vis[id]) {ret++;bfs(i, j);}}}cout << ret << endl;return 0;
}

864. 二维数组区块计数相关推荐

  1. 【HDU】1251统计难题 (字典树:二维数组,结构体数组,链表,map)

    使用二维数组或者结构体数组都可以,但是在计数的时候有一点点小区别 一.结构体数组 #include <cstdio> #include <cstring> #include & ...

  2. python读取文件中的数据为二维数组变量_Numpy 多维数据数组的实现

    numpy包(模块)几乎总是用于Python中的数值计算.这个软件包为Python提供了高性能的向量.矩阵.张量数据类型.它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时 ...

  3. 二维数组求子数组中最大的和

    上次的课堂编程题目是一维数组中子数组的和,现在难度加大了不少,二维数组需要考虑的方面很多,这个程序我是在上个课堂题目基础上加以改善完成的,核心代码如下: int maxSubArray(int a[] ...

  4. 二维数组离散程度matlab,(十八)数据分析中的一些概念

    (十八)数据分析中的一些概念 HIKAI 29 SEP 2017 0 Comments 矢量.向量.标量 矢量和向量是一个东西,只是在不同领域里面用到的不同称呼.矢量常常用在物理学中,向量在数学.几何 ...

  5. Java黑皮书课后题第8章:**8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府。当接收到用户输入后,程序报告答案是否正确。假设50个州以及它们的首府保存在一个二维数组中,提示用户回答所

    **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 **8.37(猜测首府)编写一个程序,重复提示用户输入一个州的首府. ...

  6. c#给定二维数组按升序排序_在数组中按升序对数字进行排序| 8086微处理器

    c#给定二维数组按升序排序 Problem: Write a program in 8086 microprocessor to sort numbers in ascending order in ...

  7. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) {echo '是一维数组'; ...

  8. 取二维数组最大值_学习Java,你必需要知道这些——Java数组

    目录 数组的概念 数组的创建 数组的引用 数组的创建 数组元素的初始化 数组的使用 使用数组 数组的复制 多维数组 数组的概念 数组由同一类型的对象或者基本数据组成,并封装在同一一个标识符(数组名称) ...

  9. php 三维数组合并成二维数组_Excel VBA 数组知识点,数组能不能用好,就看这个你学会没有...

    今天和大家要说的是VBA数组的应用,上篇文章我们说的是数组的基础知识点,有不明白的小伙伴可以点击链接进行知识点回顾,今天主要说说数组的几个操作方法,这个是我们以后会经常遇到的,也是经常会使用的方法. ...

  10. 一维数组与二维数组及相关问题

    package demo211124; import org.junit.Test; public class TestA { // 数组最为常见的一种数据结构     // 效率最高的存储和访问元素 ...

最新文章

  1. 讲解 Redis 的一篇深度好文!
  2. textarea 在浏览器中固定大小和禁止拖动
  3. 【AI初识境】如何增加深度学习模型的泛化能力
  4. Codeforces Round #481 (Div. 3) A. Remove Duplicates
  5. 【NLP】NLP从业人员必须知道的十大必备知识库(附资料下载)
  6. 深度学习-Tensorflow2.2-RNN循环神经网络{11}-评论分类-25
  7. (转)python3 计算字符串、文件md5值
  8. 【渝粤教育】电大中专学前儿童科学教育 (5)作业 题库
  9. linux系统中如何查看日志 (常用命令2)
  10. Javascript前端加载等待圆型圈提示实现效果
  11. 计算机网关,如何查看计算机的IP地址和网关
  12. 获取元素在文档上的正确坐标
  13. 无线网卡在使用过程突然不好使的解决方法,Deepin Linux 15.9与Windows 10双系统
  14. TOMCAT 优化设置
  15. 最新信恒第四方支付系统源码+服务器直接打包
  16. ( 科来网络分析系统 )简单的抓包步骤,具体的后面文章说
  17. B 站, YYDS!看了这些 Java视频,我直呼好家伙!!!
  18. Automatic Lip-reading with Hierarchical Pyramidal Convolution and Self-Attention for Image Sequences
  19. iphone mysql壁纸,壁纸图片动态
  20. 红米笔记本linux系统版本,一招让你的手机拥有三系统甚至四系统: WINDOWS+安卓+Linux...

热门文章

  1. 【XJTUSE计算机图形学】第四章 真实感图形学(1)——–颜色视觉
  2. 新版个人所得税计算python_最新个税计算 / 个税计算器 小程序 wepy 开发
  3. adobe photoshop cs4 注册码
  4. 常见的10种“瓶颈”
  5. 【编程之美】读书笔记:寻找最大的K个数
  6. K线形态识别—K线反转形态之头部反转形态
  7. 台式计算机是32位还64位,电脑系统装64位还是32位系统好?考虑这些才能正确安装...
  8. QtWebApp的使用【在Qt中搭建HTTP服务器】(一)
  9. 计算机0x50006错误,你们安装win8使用崩溃多少次
  10. 在线图片处理api接口