leetcode 542. 01 Matrix

    xiaoxiao2021-03-25  59

    借助队列层次遍历,相当于从每个0的地方同步地一层一层向外搜,这样保证距离最近的0是第一个先搜过来的,后面来的只要检查之前是否有搜过来即可。

    class Solution { public: vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) { int m = matrix.size(), n = matrix[0].size(); vector<vector<int>> dirs{{0,-1},{-1,0},{0,1},{1,0}}; queue<pair<int, int>> q; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (matrix[i][j] == 0) q.push({i, j}); else matrix[i][j] = INT_MAX; } } while (!q.empty()) { auto t = q.front(); q.pop(); for (auto dir : dirs) { int x = t.first + dir[0], y = t.second + dir[1]; if (x < 0 || x >= m || y < 0 || y >= n || matrix[x][y] <= matrix[t.first][t.second]) continue; matrix[x][y] = matrix[t.first][t.second] + 1; q.push({x, y}); } } return matrix; } };

    转载请注明原文地址: https://ju.6miu.com/read-36024.html

    最新回复(0)