LeetCode 733. 影象渲染 bfs模板
阿新 • • 發佈:2020-08-16
地址https://leetcode-cn.com/problems/flood-fill/
有一幅以二維整數陣列表示的圖畫,每一個整數表示該圖畫的畫素值大小,數值在 0 到 65535 之間。 給你一個座標(sr, sc)表示影象渲染開始的畫素值(行 ,列)和一個新的顏色值newColor,讓你重新上色這幅影象。 為了完成上色工作,從初始座標開始,記錄初始座標的上下左右四個方向上畫素值與初始座標相同的相連畫素點,
接著再記錄這四個方向上符合條件的畫素點與他們對應四個方向上畫素值與初始座標相同的相連畫素點,……,
重複該過程。將所有有記錄的畫素點的顏色值改為新的顏色值。 最後返回經過上色渲染後的影象。 示例1: 輸入: image = [[1,1,1],[1,1,0],[1,0,1]] sr = 1, sc = 1, newColor = 2 輸出: [[2,2,2],[2,2,0],[2,0,1]] 解析: 在影象的正中間,(座標(sr,sc)=(1,1)), 在路徑上所有符合條件的畫素點的顏色都被更改成2。 注意,右下角的畫素沒有更改為2, 因為它不是在上下左右四個方向上與初始點相連的畫素點。 注意: image 和image[0]的長度在範圍[1, 50] 內。 給出的初始點將滿足0 <= sr < image.length 和0 <= sc < image[0].length。 image[i][j] 和newColor表示的顏色值在範圍[0, 65535]內。
演算法1
bfs 模板
class Solution { public: const int dx[4] = {1, 0, 0, -1}; const int dy[4] = {0, 1, -1, 0}; vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) { int currColor = image[sr][sc]; if (currColor == newColor) returnimage; int n = image.size(), m = image[0].size(); queue<pair<int, int>> que; que.emplace(sr, sc); image[sr][sc] = newColor; while (!que.empty()) { int x = que.front().first, y = que.front().second; que.pop(); for (int i = 0; i < 4; i++) { int mx = x + dx[i], my = y + dy[i]; if (mx >= 0 && mx < n && my >= 0 && my < m && image[mx][my] == currColor) { que.emplace(mx, my); image[mx][my] = newColor; } } } return image; } };