1. 程式人生 > 實用技巧 >733. 影象渲染 - 8月16日

733. 影象渲染 - 8月16日

題目

733. 影象渲染

我的思路

很明顯的深搜或者廣搜,用一個輔助矩陣來記錄已經搜尋過的畫素點 我使用廣搜來解決: 初始化佇列,加入一個原始座標 當佇列不為空時,迴圈:取出隊頭,若滿足條件(改色,把四周為搜尋過的節點加入佇列)

我的實現

class Solution {
public:
    vector<pair<int,int>> steps ;
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int
sc, int newColor) { steps.push_back(make_pair<int,int>(1,0)); steps.push_back(make_pair<int,int>(-1,0)); steps.push_back(make_pair<int,int>(0,1)); steps.push_back(make_pair<int,int>(0,-1)); vector<vector<bool>> visitedMap;
for(int i=0;i<image.size();i++){ visitedMap.push_back(vector<bool>(image[0].size(),false));} int rawColor = image[sr][sc]; queue<pair<int,int>> Q; visitedMap[sr][sc]=true; Q.push(make_pair(sr,sc)); while(!Q.empty()){
int x = Q.front().first; int y = Q.front().second; //cout<<x<<"\t"<<y<<endl; //int tempColor = image[Q.front().first][Q.front().second]; Q.pop(); if(image[x][y]==rawColor) { image[x][y] = newColor; for(auto it:steps){ if((x+it.first)>=0&&(x+it.first)<image.size()&&(y+it.second)>=0&&(y+it.second)<image[0].size()) if(visitedMap[x+it.first][y+it.second]==false){ Q.push(make_pair(x+it.first,y+it.second)); visitedMap[x+it.first][y+it.second] = true; } } } } return image; } };

拓展學習