542. 01 Matrix(Leetcode每日一题-2020.04.15)

Problem

Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell.

The distance between two adjacent cells is 1.

Example1

Input:
[[0,0,0],
[0,1,0],
[0,0,0]]
Output:
[[0,0,0],
[0,1,0],
[0,0,0]]

Example2

Input:
[[0,0,0],
[0,1,0],
[1,1,1]]
Output:
[[0,0,0],
[0,1,0],
[1,2,1]]

Solution

多源BFS

class Solution {
public:
    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        vector<vector<int>> dist;
        if(matrix.empty())
            return dist;
        
        
        int row_num = matrix.size();
        int col_num = matrix[0].size();

        vector<vector<int>> seen(row_num,vector<int>(col_num,0));
        dist.resize(row_num,vector<int>(col_num,0));

        queue<pair<int,int>> q;

        for(int i = 0;i<row_num;++i)
            for(int j = 0;j<col_num;++j)
            {
                if(matrix[i][j] == 0)
                {
                    q.push(pair<int,int>(i,j));
                    seen[i][j] = 1;
                }
                
            }

        vector<pair<int,int>> dir = {{-1,0},{1,0},{0,-1},{0,1}};

        while(!q.empty())
        {
            auto cur = q.front();
            q.pop();

            for(int i = 0;i<dir.size();++i)
            {
                int row = cur.first + dir[i].first;
                int col = cur.second + dir[i].second;

                if(row >=0 && row < row_num && col >= 0 && col < col_num && seen[row][col] == 0)
                {
                    dist[row][col] = dist[cur.first][cur.second]+1;
                    seen[row][col] = 1;
                    q.push(pair<int,int>(row,col));
                }
            }
        }

        return dist;
    }
};

你可能感兴趣的:(leetcode广度优先搜索)