Leetcode 302 Solution

This article provides solution to leetcode question 302 (smallest-rectangle-enclosing-black-pixels)

https://leetcode.com/problems/smallest-rectangle-enclosing-black-pixels

Solution

class Solution { public: int minArea(vector<vector<char>>& image, int x, int y) { if (image.size() == 0 || image[0].size() == 0) return 0;
int m = image.size(); int n = image[0].size();
queue<pair<int, int>> q; vector<vector<bool>> visited(m, vector<bool>(n)); q.push(make_pair(x, y)); visited[x][y] = 1;
int left = y; int right = y; int top = x; int bottom = x;
while (q.empty() == false) { auto pair = q.front(); q.pop();
int x = pair.first; int y = pair.second;
left = min(left, y); right = max(right, y); top = min(top, x); bottom = max(bottom, x);
if (x > 0 && image[x - 1][y] == '1') { if (visited[x - 1][y] == 0) { q.push(make_pair(x - 1, y)); visited[x - 1][y] = 1; } }
if (x < m - 1 && image[x + 1][y] == '1') { if (visited[x + 1][y] == 0) { q.push(make_pair(x + 1, y)); visited[x + 1][y] = 1; } }
if (y > 0 && image[x][y - 1] == '1') { if (visited[x][y - 1] == 0) { q.push(make_pair(x, y - 1)); visited[x][y - 1] = 1; } }
if (y < n - 1 && image[x][y + 1] == '1') { if (visited[x][y + 1] == 0) { q.push(make_pair(x, y + 1)); visited[x][y + 1] = 1; } } }
return (right - left + 1) * (bottom - top + 1); } };