算法分析与设计丨第十一周丨Sicily(15)—— 1003. 最近的0(Hard)

来源:互联网 发布:营销网络地图代码 编辑:程序博客网 时间:2024/06/08 06:43

题目描述:

输入一个N*M的01矩阵A,对矩阵的每个位置,求至少经过多少步可以到达一个0. 每一步可以往上下左右走一格.

 
请为下面的Solution类实现解决这一问题的函数nearestZero,函数参数A为给出的01矩阵,A的行数和列数均不大于100. 函数的返回值是问题的答案.
 
class Solution {
public:
    vector<vector<int>> nearestZero(vector<vector<int>>& A) {
                        
    }
};
 
例如:
A=
1 1 1
0 1 1
0 0 1
 
答案为
1 2 3
0 1 2
0 0 1

题目解析:这次期中测试的题目,当时时间不够没有写出来,用广度优先搜索,注意放入队列当中的条件,还有matrix的设置。


// Problem#: 21103// Submission#: 5210377// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/// All Copyright reserved by Informatic Lab of Sun Yat-sen Universityclass Solution {public:    vector<vector<int>> nearestZero(vector<vector<int> >& A) {                        int row_size = A.size();            if(row_size == 0)                return A;            int col_size = A[0].size();            vector<vector<int>> result(row_size,vector<int>(col_size,100000));            int position[4][2] = {{0,-1},{0,1},{1,0},{-1,0}};            queue<pair<int,int> > my_que;            for(int i = 0; i < row_size; ++i)                for(int j = 0; j < col_size; ++j)                {                    if(A[i][j] == 0)                    {                        result[i][j] = 0;                        my_que.push({i,j});                    }                }            while(!my_que.empty())            {                pair<int,int> cur = my_que.front();                my_que.pop();                for(int i = 0; i < 4; ++i)                {                    int next_row = cur.first + position[i][0],next_col = cur.second + position[i][1];                    if(next_row >= 0 && next_col >= 0 && next_row < row_size && next_col < col_size)                    {                        if(result[next_row][next_col] > result[cur.first][cur.second] + 1)                        {                            result[next_row][next_col] = result[cur.first][cur.second] + 1;                            my_que.push({next_row,next_col});                        }                    }                }            }            return result;                         }};                                 


阅读全文
1 0
原创粉丝点击