超时代码 01 matrix

来源:互联网 发布:翻译机 知乎 编辑:程序博客网 时间:2024/06/14 07:07

class Solution {

public:

    int find0(vector<vector<int>> matrix,int x,int y)

    {

        vector<vector<int>> direction{{0,-1},{-1,0},{0,1},{1,0}};

        int row=(int)matrix.size();

        int column=(int)matrix[0].size();

        int visited[row][column];

        memset(visited,0, sizeof(visited));

        queue<pair<int,int>> q;

        q.push({x,y});

        visited[x][y]=1;

        int distance[row][column];

        distance[x][y]=0;

        memset(distance,0,sizeof(distance));

        while(!q.empty())

        {

            pair<int,int> a=q.front();

            q.pop();

            for(auto n:direction)

            {

                int newx=a.first+n[0];

                int newy=a.second+n[1];

                if(newx>=0&&newx<=row-1&&newy>=0&&newy<=column-1&&matrix[newx][newy]==0)

                    return distance[a.first][a.second]+1;

                if(newx>=0&&newx<=row-1&&newy>=0&&newy<=column-1&&visited[newx][newy]==0)

                {

                    visited[newx][newy]=1;

                    distance[newx][newy]=distance[a.first][a.second]+1;

                    q.push({newx,newy});

                }


            }

        }

        return0;

    }

    vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {

        vector<vector<int>> res;

        int m=(int) matrix.size();

        int n=(int) matrix[0].size();

        for(int i=0;i<=m-1;i++)

        {

            vector<int> re;

            for(int j=0;j<=n-1;j++)

            {

                if(matrix[i][j]==0){

                    re.push_back(0);

                }

                else{

                    re.push_back(find0(matrix,i,j));

                }

            }

            res.push_back(re);

        }

        return res;

    }

};