c_cpp FloodFill

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp FloodFill相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

bool isValid(int x, int y, vector<vector<int>> image,int startColor){
    if(x<0 || y<0 || x>=image.size() || y>=image[0].size()
    || image[x][y]!=startColor)
    {
        return false;
    }
    return true;
}

void DFS(vector<vector<int>> &image, map<pair<int,int>,bool > visited,
    int x, int y, int startColor,int newColor)
    {
    visited[{x,y}]=true;
    image[x][y]=newColor;
    vector<int> var={-1,1}; // variations;
    for(int i=0;i<2;i++){ // left,right
        int newY=y+var[i];
        if(isValid(x,newY,image,startColor) && !visited[{x,newY}]){
            DFS(image,visited,x,newY,startColor,newColor);
        }
    }
    for(int i=0;i<2;i++){ // up,down
        int newX=x+var[i];
        if(isValid(newX,y,image,startColor) && !visited[{newX,y}]){
            DFS(image,visited,newX,y,startColor,newColor);
            // for connected component for source
        }
    }
}

vector<vector<int>> floodFill(vector<vector<int>> image, int sr, int sc, int newColor) {
    int startColor=image[sr][sc];
    int r=image.size();
    int c=image[0].size();
    map<pair<int,int>,bool > visited;
    DFS(image,visited,sr,sc,startColor,newColor);
    return image;
}

int main(){
    freopen("ip.txt","r",stdin);
    int t;
    cin>>t;
    while(t--){
        int r,c;
        cin>>r>>c;
        vector< vector<int> > image(r);
        for(int i=0;i<r;i++){
            image[i].resize(c);
            for(int j=0;j<c;j++){
                cin>>image[i][j];
            }
        }
        int sr,sc;
        cin>>sr>>sc;
        int newColor;
        cin>>newColor;
        vector<vector<int> > ans=floodFill(image,sr,sc,newColor);
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                cout<<ans[i][j]<<" ";
            }
            cout<<endl;
        }
    }
}

以上是关于c_cpp FloodFill的主要内容,如果未能解决你的问题,请参考以下文章

[FloodFill] aw1097. 池塘计数(bfs+dfs+FloodFill+模板题)

[FloodFill] aw1106. 山峰和山谷(bfs+FloodFill+模板题)

floodfill

Floodfill算法——求独立子图个数

opencv —— floodFill 漫水填充,证件照换背景

UVA12171-Sculpture(离散化+floodfill)