• LeetCode 542. 01 Matrix


    输入:只包含0,1的矩阵

    输出:元素1到达最近0的距离

    算法思想:广度优先搜索。

    元素为0为可达区域,元素为1为不可达区域,我们的目标是为了从可达区域不断地扩展至不可达区域,在扩展的过程中,也就计算出了这些不可达区域到达最近可达区域的距离。

    每个可达元素都记录了到当前位置的距离,因此在后续的遍历中,如果是经由当前节点到达的下一节点,这个距离会被累加。

     1 #include <iostream>
     2 #include <vector>
     3 #include <queue>
     4 using namespace std;
     5 
     6 class Solution {
     7 public:
     8     vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
     9         int nRow = matrix.size();
    10         int nCol = matrix[0].size();
    11         vector<vector<int>> answer(nRow, vector<int>(nCol));
    12         queue<pair<int, int>> reachable;
    13         for (int i = 0; i < nRow; i++)
    14         {        
    15             for (int j = 0; j < nCol; j++)
    16             {                
    17                 if (matrix[i][j] == 0) // reachable
    18                 {
    19                     reachable.push(make_pair(i, j));
    20                     answer[i][j] = 0;
    21                 }
    22                 else
    23                     answer[i][j] = INT_MAX;
    24             }
    25         }
    26 
    27         vector<pair<int, int>> dir = vector<pair<int, int>>({make_pair(-1,0),make_pair(1,0),make_pair(0,-1),make_pair(0,1)});
    28 
    29         while (!reachable.empty())
    30         {
    31             pair<int, int> cur = reachable.front();
    32             for (int i = 0; i < 4; i++)
    33             {
    34                 int x = dir[i].first;
    35                 int y = dir[i].second;
    36                 int cx = cur.first;
    37                 int cy = cur.second;
    38                 if (cx + x < 0 || cx + x > nRow - 1 || cy + y < 0 || cy + y > nCol - 1) // boundary test
    39                     continue;
    40                 if (matrix[cx+x][cy+y] == 1) // not visited
    41                 {
    42                     matrix[cx + x][cy + y] = 0; // label visited
    43                     answer[cx + x][cy + y] = answer[cx][cy] + 1;
    44                     reachable.push(make_pair(cx + x, cy + y));
    45                 }
    46             }
    47             reachable.pop();
    48         }
    49         return answer;
    50     }
    51 };
  • 相关阅读:
    centos/7/isos/x86_64 下载
    Zend Guard Run-time support missing 问题的解决
    php.ini
    PS 基础知识 .pat文件如何使用
    PS 基础知识 .atn文件如何使用
    PS 如何用制作键盘图标
    PS 如何制作WIN7的玻璃化透明窗口效果
    PS常用平面设计制作尺寸
    如何使用Medieval CUE Splitter分割ape,合并ape,制作cue
    如何将MID音乐转换成MP3
  • 原文地址:https://www.cnblogs.com/zhsuiy/p/6914581.html
Copyright © 2020-2023  润新知