542. 01 矩阵

题目描述

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。

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

示例 1:
输入:

0 0 0
0 1 0
0 0 0

输出:

0 0 0
0 1 0
0 0 0

示例 2:
输入:

0 0 0
0 1 0
1 1 1

输出:

0 0 0
0 1 0
1 2 1

注意:

给定矩阵的元素个数不超过 10000。
给定矩阵中至少有一个元素是 0。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。

分析

采用BFS算法
第一步,遍历矩阵,所有的0值都可能是起点,保存到队列,非0值设置成INT_MAX
第二步,遍历队列,取队列头的点,x, y。判断上、下、左、右的点,如果大于matrix[x][y] + 1,则更新这些点的数值,并把更新后的点放进队列里面,因为这些点更新了,这些点周围的点也可能需要更新

代码

class Solution {
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        int row = matrix.size();
        int col = matrix[0].size();
        queue<pair<int,int>> q;
        for(int i = 0; i < row; i++) {
            for(int j = 0; j < col; j++) {
                if(matrix[i][j] == 0) {
                    q.push(make_pair(i, j));
                } else {
                    matrix[i][j] = INT_MAX;
                }
            }
        }
        
        while(!q.empty()){
            auto p = q.front();
            int x = p.first;
            int y = p.second;
            q.pop();
            int cur = matrix[x][y] + 1;
            if(x > 0 && matrix[x - 1][y] > cur) {
                matrix[x-1][y] = cur;
                q.push(make_pair(x - 1, y));
            }
            if(x < row - 1 && matrix[x + 1][y] > cur) {
                matrix[x + 1][y] = cur;
                q.push(make_pair(x + 1, y));
            }
            if(y > 0 && matrix[x][y - 1] > cur) {
                matrix[x][y - 1] = cur;
                q.push(make_pair(x, y - 1));
            }
            if(y < col - 1 && matrix[x][y + 1] > cur) {
                matrix[x][y + 1] = cur;
                q.push(make_pair(x, y + 1));
            }
        }
        return matrix;
    }
};

题目链接

https://leetcode-cn.com/problems/01-matrix/description/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 10,195评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,073评论 19 139
  • 本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。 一、android为什么要序列化?什么是序列化,怎么进行...
    阿敏其人阅读 44,754评论 20 100
  • 学车,是叫人激动又紧张的,激动的是我将学到一个受益终生,便利生活的技能,而紧张的是,教练“打骂责罚”学员的消息层出...
    豆眼儿山雀阅读 2,622评论 2 2
  • 果素阅读 3,199评论 0 1

友情链接更多精彩内容