1. 程式人生 > >733. Flood Fill

733. Flood Fill

art amp red use ide ted with for osi

An image is represented by a 2-D array of integers, each integer representing the pixel value of the image (from 0 to 65535).

Given a coordinate (sr, sc) representing the starting pixel (row and column) of the flood fill, and a pixel value newColor, "flood fill" the image.

To perform a "flood fill", consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color as the starting pixel), and so on. Replace the color of all of the aforementioned pixels with the newColor.

At the end, return the modified image.

Example 1:

Input: 
image = [[1,1,1],[1,1,0],[1,0,1]]
sr = 1, sc = 1, newColor = 2
Output: [[2,2,2],[2,2,0],[2,0,1]]
Explanation: 
From the center of the image (with position (sr, sc) = (1, 1)), all pixels connected 
by a path of the same color as the starting pixel are colored with the new
color. Note the bottom corner is not colored 2, because it is not 4-directionally connected to the starting pixel.

給一個起始點,替換新值。並把與該點四聯通區域內的值相同的點一並替換。對“四聯通點”的符合條件的四聯通點也同樣操作。

這個跟圖像處理裏面的“種子點生長”很像,給定一個種子點,不斷擴張,直至把所有聯通的區域填滿。

遍歷所有符合的點就可以了,深度優先或廣度優先都可以用。

深度優先的代碼:

class Solution {
public:
    vector<vector<int
>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) { int row = image.size(); int col = image[0].size(); int rec = image[sr][sc]; if (rec==newColor) return image; image[sr][sc] = newColor; if(sr-1>=0 && image[sr-1][sc]==rec) floodFill(image, sr-1, sc, newColor); if(sr+1<row && image[sr+1][sc]==rec) floodFill(image, sr+1, sc, newColor); if(sc-1>=0 && image[sr][sc-1]==rec) floodFill(image, sr, sc-1, newColor); if(sc+1<col && image[sr][sc+1]==rec) floodFill(image, sr, sc+1, newColor); return image; } };

733. Flood Fill