542. 01 矩陣

題目描述

給定一個(gè)由 0 和 1 組成的矩陣,找出每個(gè)元素到最近的 0 的距離。

兩個(gè)相鄰元素間的距離為 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

注意:

給定矩陣的元素個(gè)數(shù)不超過 10000。
給定矩陣中至少有一個(gè)元素是 0。
矩陣中的元素只在四個(gè)方向上相鄰: 上、下、左、右。

分析

采用BFS算法
第一步,遍歷矩陣,所有的0值都可能是起點(diǎn),保存到隊(duì)列,非0值設(shè)置成INT_MAX
第二步,遍歷隊(duì)列,取隊(duì)列頭的點(diǎn),x, y。判斷上、下、左、右的點(diǎn),如果大于matrix[x][y] + 1,則更新這些點(diǎn)的數(shù)值,并把更新后的點(diǎn)放進(jìn)隊(duì)列里面,因?yàn)檫@些點(diǎn)更新了,這些點(diǎn)周圍的點(diǎn)也可能需要更新

代碼

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/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 算法思想貪心思想雙指針排序快速選擇堆排序桶排序荷蘭國旗問題二分查找搜索BFSDFSBacktracking分治動(dòng)態(tài)...
    第六象限閱讀 4,889評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,516評(píng)論 19 139
  • 本文出自 “阿敏其人” 簡(jiǎn)書博客,轉(zhuǎn)載或引用請(qǐng)注明出處。 一、android為什么要序列化?什么是序列化,怎么進(jìn)行...
    阿敏其人閱讀 44,892評(píng)論 20 100
  • 學(xué)車,是叫人激動(dòng)又緊張的,激動(dòng)的是我將學(xué)到一個(gè)受益終生,便利生活的技能,而緊張的是,教練“打罵責(zé)罰”學(xué)員的消息層出...
    豆眼兒山雀閱讀 360評(píng)論 2 2
  • 果素閱讀 481評(píng)論 0 1

友情鏈接更多精彩內(nèi)容