LeetCode542. 01 矩阵(C++中等题)

news2024/11/26 18:27:56

题目

给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。

两个相邻元素间的距离为 1 。

示例 1:

输入:mat = [[0,0,0],[0,1,0],[0,0,0]]
输出:[[0,0,0],[0,1,0],[0,0,0]]
示例 2:

 

输入:mat = [[0,0,0],[0,1,0],[1,1,1]]
输出:[[0,0,0],[0,1,0],[1,2,1]]
 

提示:

m == mat.length
n == mat[i].length
1 <= m, n <= 104
1 <= m * n <= 104
mat[i][j] is either 0 or 1.
mat 中至少有一个 0 

思路

BFS,跟树的遍历不同,图的遍历刚开始可能有多个节点,我们首先需要将为0的节点插入到队列中,将为1的节点值设置为-1,防止重复查找,然后再遍历整个队列就行

代码

class Solution {
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
        queue<pair<int, int>> q;
        int m = mat.size(), n = mat[0].size();
        //遍历一遍mat,队列中插入为0的点,并从这些点开始扩散
        for(int i = 0; i < m; i ++)
            for(int j = 0; j < n; j ++)
            {
                if(mat[i][j] == 0) q.push({i, j});
                else mat[i][j] = -1;//如果是1,都赋初值为-1,代表未查找过,防止重复查找
            }

        while(q.size())
        {
            auto t = q.front();
            q.pop();

            int x = t.first, y = t.second;
            int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
            for(int i = 0; i < 4; i ++)//上下左右
            {
                int a = dx[i] + x, b = dy[i] + y;
                if(a >= 0 && a < m && b >=0 && b < n && mat[a][b] == -1)
                {
                    mat[a][b] = mat[x][y] + 1;
                    q.push({a, b});
                }
            }
        }
        return mat;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/50168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(三) 共享模型之管程【共享带来的问题】

一、共享带来的问题 1. 临界区 &#xff08;1&#xff09;一个程序运行多个线程本身是没有问题的 &#xff08;2&#xff09;问题出在多个线程访问共享资源 1️⃣多个线程读共享资源其实也没有问题 2️⃣在多个线程对共享资源读写操作时发送指令交错&#xff0c;就会出现问题 …

git@github.com: Permission denied (publickey).

本地虚拟机ubuntu上安装git&#xff0c;想从github上拉取项目到ubuntu上的过程。 1、在ubuntu上安装git 更新apt指令 sudo apt update 安装git sudo apt install git 查看安装git版本 git --version 2、ssh认证 首先已经安装了ssh指令 先执行 ssh -T gitgithub.com 执行之…

3.11 怎么增加小红书评论区的互动?【玩赚小红书】

今天就为大家总结了一下&#xff0c;关于小红书粉丝互动的一些小技巧&#xff0c;来供大家参考。 ​ ​ 一、 固好“真爱粉” 经常会在笔记下面评论、点赞、浏览笔记内容的粉丝&#xff0c;也就是所谓的“真爱粉”、“铁粉”&#xff0c;我们就需要用心维护这一部分粉丝。 ​…

虹科分享|硬件加密U盘|居家办公的网络安全:远程员工可以采取的步骤

新冠肺炎的流行迫使数以百万计的人在家工作&#xff0c;而当时他们对这一概念知之甚少&#xff0c;甚至完全没有经验。虽然许多员工已经重返办公室&#xff0c;但最近的一项研究发现&#xff0c;72%的受访者希望每周至少有两天在家工作&#xff0c;32%的人表示他们希望永久在家…

全波形反演的深度学习方法: 第 4 章 基于正演的 FWI (草稿)

本章论述经典的 FWI, 它基于正演方法. 本贴仅供内部培训. 4.1 FWI 问题 图 4.1 FWI 的输入与输出 [1].图 4.2 FWI 的数学式子.正演问题是建立从速度模型到地震数据的映射. 一般认为是单解的, 即一个速度模型只能生成一个地震数据 (如果不考虑噪声).反演问题是建立从地震数据到…

【题解】E. Sending a Sequence Over the Network(1741)

链接&#xff1a;https://codeforces.com/problemset/problem/1741/E 题目大意 给出一个数组&#xff0c;判断它是否是合法的&#xff0c;如果合法则输出YES&#xff0c;不合法则输出NO。 合法规则&#xff1a;一段序列中&#xff0c;这个序列的第一个或者最后一个的数值&…

岩藻多糖-聚乙二醇-胆固醇Cholesterol-PEG-FucoidanFucoidan-Cholesterol 岩藻多糖-胆固醇

岩藻多糖-聚乙二醇-胆固醇Cholesterol-PEG-FucoidanFucoidan-Cholesterol 岩藻多糖-胆固醇 中文名称&#xff1a;岩藻多糖-胆固醇 英文名称&#xff1a;Fucoidan-Cholesterol 别称&#xff1a;胆固醇修饰岩藻多糖&#xff0c;胆固醇-岩藻多糖 外观:固体或粘性液体&#xff…

终于有人将TWI(串行通讯接口)给讲通了!

目录 TWI的特性 数据传输格式 时钟同步 数据仲裁 功能描述 总线接口单元 频率生成单元 地址匹配单元 控制单元 传输模式 主机发送模式 主机接收模式 从机发送模式 从机接收模式 TWI的特性 两线模式&#xff0c;简单快捷&#xff1b;支持主机模式和从机模式&#xff…

「科普」如何评价供应商的MES系统

MES综合性很强&#xff0c;涉及到多个业务领域、多种技术和多专业&#xff0c;如何写好最难的投标技术方案呢&#xff1f;简搭(jabdp)根据多年经验&#xff0c;为大家进行梳理和分解&#xff0c;帮助发愁的你写出好方案&#xff01; MES是一个综合性很强的系统&#xff1a; 生…

68 - 令人迷惑的写法

---- 整理自狄泰软件唐佐林老师课程 1. 写法一 下面的程序想要表达什么意思&#xff1f; 1.1 历史原因 早期的C直接复用class关键字来定义模板 但是泛型编程针对的不只是类类型 class关键字的复用使得代码出现二义性 1.2 typename诞生的直接诱因 自定义类类型内部的嵌套…

猿如意|手把手教你下载、安装和配置PyCharm社区版

手把手教你使用猿如意下载、安装和配置PyCharm社区版&#xff0c;希望能帮助到有需要的童鞋。 文章目录前言一、下载安装猿如意二、安装PyCharm社区版1.通过猿如意找到PyCharm下载位置2.安装PyCharm三、对PyCharm社区版进行简单设置1.设置PyCharm社区版为中文2.安装第三方Pytho…

数据同步,还看Canal

一个系统最重要的是数据&#xff0c;有时对于一个业务场景&#xff0c;不单单是把数据保存在数据库中&#xff0c;还需要同步保存在ES&#xff0c;Redis等等中。这时阿里开源组件Canal由此而生&#xff0c;它可以同步数据库中的增量数据保存到其它存储应用中。 一、介绍 canal…

航空专场 | 无人机设计仿真流程讲解与案例实操

一、CFD在无人机上的应用 1、静、动气动系数计算以上介绍的无人机的流动状态一般为中低雷诺数&#xff0c;不可压缩流动。这些计算一般用S-A模型或者KW-SST模型进行计算&#xff0c;能够获得不错的工程精度。静、动气动力系数主要用于无人机操纵性和稳定性的分析&#xff0c;评…

串口 COM口,并口 LPT口,RS232、RS485、CAN

RS232 和 RS485 的区别 工作模式&#xff1a;RS232 为全双工&#xff0c;RS485 为半双工。 传输方式&#xff1a;RS485和RS232只是物理协议的通信&#xff08;即接口标准&#xff09;&#xff0c;RS485是差分传输方式&#xff0c;RS232是单端传输方式&#xff0c;但通信程序没有…

RabbitMQ_五种模式

1.Simple("Hello World") 构成&#xff1a;生产者、消费者、消息队列 配置类 构造函数参数&#xff1a;name durable exclusive autoDelete 仅创建队列&#xff0c;不创建交换机&#xff0c;也不进行队列和交换机的绑定 注&#xff1a;配置类置于生产者端或消费者…

如何处理 Angular 单页面应用里的 a 标签,避免点击后重新加载整个应用

问题描述 客户已经实现了一些“free html”组件&#xff0c;它是 HTML 的标题和包装器&#xff0c;与 OCC 响应一起作为内容。 <div [innerHTML]"data?.content | safeHtml"></div>这个 HTML 里包含了 anchor element&#xff1a; <div class&quo…

Linux源码——目录作用

Linux Linux是啥&#xff0c;不用多说&#xff0c;其源码结构也非常清晰。有以下理解&#xff1a; arch 每个系列的CPU都有一个对应的文件夹&#xff0c;里面包含每种CPU具体的操作&#xff0c;单独具体粗来每种CPU独有的管理或者操作。其他的文件夹都是通用的操作。 arch (…

孤核函数-isolation kernel

1.孤立核 一看到核函数&#xff0c;我们第一时间想到的就是核函数通过升维或者降维的方式来计算数据之间的相似度。他在SVM和聚类算法中应用广泛。 我们就直入主题来看一下孤核函数的数学推导。 在d维的空间分布着n个点。数学表达式为. 如图&#xff1a;一共20个点分布在2维空间…

浅析linux内核网络协议栈--linux bridge

1 . 前言 本文是参考附录上的资料整理而成&#xff0c;以帮助读者更好的理解kernel中brdige 模块代码。 2. 网桥的原理 2.1 桥接的概念 简单来说&#xff0c;桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是&#xff0c;其中一个网口收到的报文会被复制给其他…

深入了解BLE(Bluetooth 5.3)持续更新...

目录 1 BLE的优点和局限性 1.1 BLE与经典蓝牙的区别 1.2 局限性 1.2.1 数据吞吐量 1.2.2 范围 1.3 BLE优势及应用 1.4 BLE的角色 1.5 BLE的层次结构 1.5.1 物理层&#xff08;PHY&#xff09; 1.5.2 链路层 1.5.2.1 数据包格式 1.5.2.2 状态机 1.5.2.3 设备地址 …