IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Leetcode-542. 01 矩阵 -> 正文阅读

[数据结构与算法]Leetcode-542. 01 矩阵

链接

542. 01 矩阵

题目

给定一个由 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 <= 10e4
  • 1 <= m * n <= 10e4
  • mat[i][j] is either 0 or 1.
  • mat 中至少有一个 0?

思路一(BFS)

我们可以先假设整个矩阵中只有一个0,那么只要从这个0开始进行广度优先搜索,这个0上下左右的1的距离全部为1,然后再外面一圈的1的距离全为2...以此类推。但该题矩阵中的0的个数不止一个而是有多个,这种情况下,我们就可以假设还存在一个超级0,所有的0到都是由这个超级0通过广度优先搜索搜到的,只不过他们的距离不是1而是0,这样就转化成了前面只有1个0的情况。

而具体的做法就是将所有的0的位置全都添加都队列当中,逐一进行广度优先搜索,依次减第二层,第三层搜索到的位置再次添加到队列当中进行广度优先搜索,每一轮距离+1。

C++ Code

class Solution {
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
        int m=mat.size();
        int n=mat[0].size();
        vector<vector<int>> dist(m,vector<int>(n,0));
        vector<vector<bool>> view(m,vector<bool>(n,0));
        queue<pair<int, int>> q;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(mat[i][j]==0)
                {
                    view[i][j]=true;
                    q.emplace(i, j); //先将所有值为0的坐标加入到队列
                }

        int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
        while(!q.empty())
        {
            auto [x,y]=q.front();
            q.pop();
            for(int i=0;i<4;i++)
            {
                int nx=x+dirs[i][0];
                int ny=y+dirs[i][1];
                if(nx>=0 && ny>=0 &&nx<m &&ny<n &&!view[nx][ny])
                {
                    dist[nx][ny]=dist[x][y]+1;
                    view[nx][ny]=true;
                    q.emplace(nx, ny);
                }
            }
        }
        return dist;
    }
};

?

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:39:43  更:2022-03-03 16:42:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:41:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码