码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode-542-01 Matrix

时间:2017-03-21 22:09:43      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:sts   cat   date   title   difficult   his   which   alt   经典   

Leetcode-542-01 Matrix

542. 01 Matrix

  • Total Accepted: 1502
  • Total Submissions: 4775
  • Difficulty: Medium
  • Contributors: Stomach_ache

 

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.

Example 1: 
Input:

0 0 0
0 1 0
0 0 0
Output:
0 0 0
0 1 0
0 0 0

 

Example 2: 
Input:

0 0 0
0 1 0
1 1 1
Output:
0 0 0
0 1 0
1 2 1

 

Note:

  1. The number of elements of the given matrix will not exceed 10,000.
  2. There are at least one 0 in the given matrix.
  3. The cells are adjacent in only four directions: up, down, left and right.

 

 

Subscribe to see which companies asked this question.

 

 

题解:

   经典的使用BFS的方法。 

 

 

class Solution {
public:
    const int dx[4] = {0, 0, -1, 1}; 
    const int dy[4] = {1, -1, 0, 0}; 
    
    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        if(matrix.size() == 0 || matrix[0].size()==0){
            vector<vector<int> > ans; 
            return ans; 
        }
        int row = matrix.size(), colum = matrix[0].size(); 
        
        vector<vector<int> > ans(row, vector<int>(colum, 0)); 
        
        queue<pair<int,int>> seq; 
        vector<vector<int> > vis(row, vector<int>(colum, 0)); 
        for(int i=0; i<row; ++i){
            for(int j=0; j<colum; ++j){
                if(matrix[i][j] == 1){
                    if((i>0 && matrix[i-1][j]==0) || (i+1<row && matrix[i+1][j]==0) || 
                        (j>0 && matrix[i][j-1]==0)|| (j+1<colum && matrix[i][j+1]==0) ){
                            seq.push(make_pair(i, j)); 
                            ans[i][j] = 1; 
                            vis[i][j] = 1; 
                        }
                }
            }
        }
        
        int x, y, tmp_x, tmp_y; 
        while(!seq.empty()){
            x = seq.front().first; y = seq.front().second; 
            seq.pop(); 
            for(int i=0; i<4; ++i){
                tmp_x = dx[i] + x; tmp_y = dy[i] + y; 
                if(tmp_x >=0 && tmp_x <row && tmp_y >=0 && tmp_y < colum && matrix[tmp_x][tmp_y] == 1 && vis[tmp_x][tmp_y]==0){
                    ans[tmp_x][tmp_y] = ans[x][y] + 1; 
                    vis[tmp_x][tmp_y] = 1; 
                    seq.push(make_pair(tmp_x, tmp_y)); 
                }
            }
        }
        
        return ans; 
    }
};

  

 

Leetcode-542-01 Matrix

标签:sts   cat   date   title   difficult   his   which   alt   经典   

原文地址:http://www.cnblogs.com/zhang-yd/p/6596886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!