【广搜】给定的矩阵中“块”的个数

求连通块(BFS、DFS例题) 题目: 给出一个mxn的矩阵,矩阵中的元素为0或1。称位置(x, y)与其上下左右四个位置(x,y+1)、 (x,y-1) (x+1,y) (x- 1, y)是相邻的。如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些1构成了一个“块”。求给定的矩阵中“块”的个数。 前言:记录一下思路,方便以后回来复习一下 思路与要点: 1、设置方向增量的数组: int X[] = { 0,0,1,-1 }; //方向增量数组 int Y[] = { 1,-1,0,0 }; 2、设置一个记录点坐标的结构体(pa 阅读详情

一、问题描述 

给出一个 m x n 的矩阵,矩阵中的元素为0或1。

称位置(x,y)与其上下左右四个位置(x,y+1)、(x,y-1)、(x+1,y)、(x-1,y)是相邻的。

如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些1构成了一个“块”。求给定的矩阵中“块”的个数。

0 1 1 1 0 0 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0
0 0 0 1 1 1 0
1 1 1 0 1 0 0
1 1 1 1 0 0 0

例如上面的6×7的矩阵中,“块”的个数为4。

 二、代码实现

#include<cstdio>
#include<queue>
using namespace std;

const int maxn=100;

struct Node
{
	int x,y;
}node;

int n,m;
int matrix[maxn][maxn];
bool inq[maxn][maxn]={false};

int X[4]={0,0,1,-1};
int Y[4]={1,-1,0,0};

bool judge(int x,int y)
{
	if(x>=n||x<0||y>=m||y<0) return false;
	if(matrix[x][y]==0||inq[x][y]==true) return false;
	return true;
}

void BFS(int x,int y)
{
	queue<Node> Q;
	node.x=x,node.y=y;
	Q.push(node);
	inq[x][y]=true;
	while(!Q.empty())
	{
		Node top=Q.front();
		Q.pop();
		for(int i=0;i<4;i++)
		{
			int newX=top.x+X[i];
			int newY=top.y+Y[i];
			if(judge(newX,newY))
			{
				node.x=newX,node.y=newY;
				Q.push(node);
				inq[newX][newY]=true;
			}
		}				
	}	
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int x=0;x<n;x++)
	{
		for(int y=0;y<m;y++)
		{
			scanf("%d",&matrix[x][y]);
		}
	}
	int ans=0;
	for(int x=0;x<n;x++)
	{
		for(int y=0;y<m;y++)
		{
			if(matrix[x][y]&&inq[x][y]==false)
			{
				ans++;
				BFS(x,y);
			}
		}
	}
	printf("%d\n",ans);
	return 0;
}

 

BFS,DFS两种方法求矩阵中“块”的个数 题目来源:《算法笔记》P276 问题描述: 给一个m * n的01矩阵,将一个点的上下左右位置称为与它相邻的位置。如果矩阵中若干个1是相邻的,那么称这些1是一个相邻的“块”。求给定矩阵中块的个数 输入样例(6 * 7的01矩阵): 6 7 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 1... 阅读详情

相关推荐

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1030

BFS 求给定的矩阵中“块”的个数

给出一个 m×n 的矩阵,矩阵中的元素为 0 或 1。称位置 (x, y) 与其上、下、左、右四个位置是相邻的。如果矩阵中有若干个 1 是相邻的(不必考虑两两相邻),那么称这些 1 构成了一个“块”。求给定矩阵中“块”的个数。 Sample Input: 6 7 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 1 0 0 0 Sample Output: 4 思路: 对于矩阵 Matrix

gengsj 292

音频分割:长语音音频 分割为 短语音音频 - python 实现

音频分割:长语音音频 分割为 短语音音频 - python 实现

DATABALL 的博客 1205

算法笔记---求给定矩阵中“块”的个数

题目描述 给出一个n*m的矩阵,矩阵中的元素为0或1。称位置(x,y)与其上下左右四个位置(x,y+1)、(x,y-1)、(x+1,y)、(x-1,y)是相邻的。如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些1构成了一个“块”。求给定的矩阵中“块”的个数。 例如: 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 ...

、思考致富的博客 601

golang任意代码免杀绕过火绒+电脑管家

火绒和电脑管家主要以静态规则为主,但是有时候静态杀起来也挺让人奔溃的,这边分享一下如何拿捏火绒和电脑管家本文主要介绍如何通过garble进行混淆编译来绕过火绒,garble也可以绕过其他杀软,但是对火绒和电脑管家特别有效果,以火绒为例 下面来对比一下golang原生和garble混淆编译后得差距来一个很原始的的shellcode loader代码,将原始shellcode base64后就进行加载执行。

2301_79571829的博客 1532

求矩阵中块的个数-BFS-c++

求矩阵中块的个数 给出一个m*n的矩阵,矩阵中元素为0和1。称位置(x,y)与它上下左右四个位置(x,y-1),(x,y+1),(x-1,y),(x+1,y)是相邻的。如果矩阵中有若干个1是相邻的,则称这些1组成了一个块。计算给定矩阵中块的个数。如: 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 ...

qq_40244354的博客 531

手把手教你解决CentOS sshd启动报错:从权限问题到目录缺失的全套解决方案

本文提供了一套完整的CentOS SSH服务启动故障排查与修复方案。针对sshd启动报错,从systemd日志分析、sshd -t配置测试入手,详细解决了私钥文件权限过宽(如0644错误)和权限分离目录缺失等典型问题,并附带了扩展排查清单,帮助运维人员系统性地定位和解决连接故障。

weixin_29248611的博客 152

判断矩阵块的数目(广度优先搜索)

1. 问题描述: 给出一个n * m的矩阵,矩阵中的元素为0或1,称位置(x,y)与其上下左右四个位置(x,y + 1)、(x,y - 1)、(x + 1,y)、(x - 1,y)是相邻的,如果矩阵中有若干个1是相邻的(不必两两相邻),那么称这些组成了一个块,求给定的矩阵中块的数目 例如下面的例子6 * 7的矩阵中,块的数目是4: 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0...

二哈 1072

【BUG已解决】pip install 出现 error: Microsoft Visual C++ 14.0 or greater is required 解决方案

方案磁盘占用适用场景推荐指数安装Build Tools3-6GB长期Windows Python开发⭐⭐⭐⭐⭐寻找预编译wheel无额外占用只是想快速装上某个包⭐⭐⭐⭐⭐用conda安装视包而定已经在用conda环境⭐⭐⭐⭐⭐升级到新版本无额外占用库本身有更新的预编译版本⭐⭐⭐⭐使用WSL2需要额外配置Linux子系统频繁遇到Windows编译问题⭐⭐⭐⭐的核心是Windows 缺少本地 C/C++ 编译器,而目标包需要在本机编译。先看是否有捷径。

博客 1万+

图像处理基础 || (一) python 读取图像的常用方式

图像的读取与保存是图像处理或计算机视觉领域中最基本的操作,python中有众多的库支持图像的读取、显示与存储,常用的库包括 matplotlib、skimage 和 Pillow 库。

weixin_40234309的博客 5683

深搜与广搜(一)

详解深度优先搜索和广度优先搜索,记个笔记以后复习方便一点。

qq_46076798的博客 1104

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

OSPF的7种状态,DR与BDR的基本概念,1、2、3、4、5、7类LSA解析,Stub、NSSA、Totally Stub、Totally NSSA的基本概念与配置

weixin_72194028的博客 3007

算法日记 43-44 day 图论(深搜,广搜)

深搜和广搜

weixin_70808146的博客 1266

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

BFS——矩阵中“相邻”元素的个数

问题概述: 给出一个N×M矩阵,对于矩阵元素(x,y)称其上下左右四个位置(x,y+1),(x,y-1),(x+1,y),(x-1,y)是“相邻”的。如果一个矩阵的元素中只有0,1,若有若干个1是相邻的,则这些1就构成了一个“块”,求矩阵中块的个数。 例如:6×7矩阵中,块的个数为4 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 ...

一把把把把住了! 2165

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

2025.7.22广搜算法复习总结

脚造数据一组,欢迎hack。

chenyy2333的博客 591

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Algorithm:矩阵中“块”的个数

问题描述: 给一个m * n的01矩阵,如果矩阵中若干个1是相邻的,那么称这些1是一个相邻的“块”。求给定矩阵中块的个数 输入样例(8 * 7的01矩阵): 0 1 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 1 0 1 1 0 1 1 0 1 0 该矩阵中“块”的...

YDDUONG的博客 1205

搜广推校招面经五十

处理连续数据,以加速决策树的训练。这种方法避免了对所有特征值进行遍历,大幅提升计算效率,同时对模型精度影响很小。,避免传统 GBDT 在遍历所有样本时的高昂计算开销。见【搜广推校招面经九、十】LightGBM 使用。这种方式的核心目标是。

Y1n的博客 1545

图的遍历 - 邻接矩阵 - 深搜与广搜

深搜与广搜图论的遍历基础。而且今天讨论的是最简单的邻接矩阵。 下图是邻接矩阵的大致概念。 在C语言中邻接矩阵的定义方式如下://-----图的邻接矩阵存储表示----- #define MaxInt 32767//表示极大值 #define MVNum 100//最大顶点数 typedef char VerTexType;//假设顶点的数据类型为字符型 typedef int ArcType

Daioo 随笔 2373

BFS进阶技巧——多源BFS、最小步数模型、双端队列广搜、双向广搜

多源BFS 多源BFS时有从多个源点出发的bfs算法,只需要将多个源点都连一条边权为0的边到虚拟源点,那么问题就等价于从虚拟源点开始BFS。 一开始直接将所有源点加入BFS的队列即可. 矩阵距离 输入样例: 3 4 0001 0011 0110 输出样例: 3 2 1 0 2 1 0 0 1 0 0 1 思路 题意为搜索所有0点到一群1点的最短曼哈顿距离。 将所有为1的点直接加入bfs队列,向外搜索,由bfs性质到达的点一定离虚拟源点最短,而到虚拟源点的距离 == 到1点的距离,故最短。 代码 /*

AKAPinkman的博客 2108

理解与证明“线性无关的特征向量的个数=若当块个数”

1.1 问题 若当标准形中,有一条性质说:一个矩阵的线性无关的特征向量个数等于其若当标准形的若当块个数。其实,这条简单的性质涉及很多知识——特征根与特征向量、代数重根与几何重根、对角标准形与若当标准形等,能够理解和证明很有价值。这里就边说明边证明,可能不是十分规范,但力求易懂些(通俗就算了)。 1.2 理解与证明 首先说明,以下的 nnn 阶方阵 AAA 是满秩的。 对于 nnn 阶方阵 AAA,总存在相似的若当标准形矩阵,即存在非奇异矩阵 PPP 与若当标准形 JJJ,使得: P−1AP=J(1.1).

强强的博客 1万+

图(邻接矩阵)知识大杂烩!!(邻接矩阵结构,深搜,广搜,prim算法,kruskal算法,Dijkstra算法,拓扑排序)(学会一文让你彻底搞懂!!)

图 邻接矩阵 bfs dfs prim kruskal Dijkstra 拓扑排序

weixin_74901355的博客 1566

2025.7.22广搜复习总结

电梯只有四个按钮:开,关,上,下。解法:这次不仅要求联通块,还要求有几组大小相等的连通块,还要求最大组的大小,有点麻烦,所以可以把没有返回值的bfs变成返回int类型的函数,在函数里标记完起点后定义计数器代表大小,每次在判断是否合法的里面sum++,最后返回sum。解法:因为这次不是矩阵而是一串编号,所以要把dis开成一维数组,传入的两个参数也变成了一个,因为变成了一个,结构体都改成了int,里面的for循环也不用了,只需要两个if判断是否合法,一个是t+x[t],一个是t-x[t],其他的基本都一样。

yejunxi604的博客 1959

有向图的创建及深搜广搜

文章目录输入输出有向图的创建深搜深搜的定义代码实现广搜广搜的定义广搜的原理代码实现 输入 第一行输入两个整数,以空格隔开,分别代表图的顶点数n和弧数e。(顶点个数<=20) 第二行依次输入顶点值,类型为字符,中间不用间隔符。 接下去有e行,每行为两个字符 uv(中间没有间隔符),表示一条弧<u,v>。 5 7 ABCDE AB AE BC CD DA DB EC 输出 第一行,输...

吃橘子 822

python--蓝桥杯--深搜DFS、广搜BFS

给定一个n*m大小的迷宫,其中*代表不可通过的墙壁,而 . 代表平地,S表示起点,T代表终点。移动过程中,如果当前位置是(x,y)(下标从0开始),且每次只能前往上下左右四个平地,求从起点S到终点T的最小步数。给出一个矩阵n*m,矩阵中的元素为0/1。称位置(x,y)与其上下左右四个位置是相邻的。如果矩阵中有若干个1是相邻的(不必是俩俩相邻),那么称这些1构成一个块。求给定的矩阵中快的个数。

m0_64164961的博客 598

求0 ,1矩阵中岛的个数和0,1矩阵的最大连续全1块(可以非规则)

前言 很多面试算法题都涉及0 ,1矩阵相关知识,下面主要讲一下寻找0 ,1矩阵中含有连续全1块的个数(岛的个数)和0, 1矩阵中最大连续的全1块。 定义 0 ,1矩阵中含有连续全1块的个数 一个矩阵中只有0和1两种值, 每个位置都可以和自己的上、 下、 左、 右 四个位置相连, 如果有一片1连在一起, 这个部分叫做一个岛, 求一个 矩阵中有多少个岛? 举例: 0 0 1 ...

Mr番茄蛋的博客 1万+
上一篇: 从N个整数中选择K个数
下一篇: 【广搜】从起点S到达终点T的最少步数
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值