Implement the “paint fill” function that one might see on many image editing programs. That is, given a screen (represented by a 2-dimensional array of Colors), a point, and a new color, fill in the surrounding area until you hit a border of that color.
To solve this problem, Hawstein used recursive method and there is also a BFS method.
Here gives the recursive code.
// http://hawstein.com/posts/8.6.html
#include <iostream>
using namespace std;
enum color{red, yellow, blue, green
};
bool paint(color screen[][5], int m, int n, int x, int y, color c){
if(x<0||x>m||y<0||y>n) return false;
else if(screen[x][y]==c) return false;
else{
screen[x][y]=c;
paint(screen, m, n, x-1,y,c);
paint(screen, m, n, x+1,y,c);
paint(screen, m, n, x,y-1,c);
paint(screen, m, n, x,y+1,c);
}
return true;
}
int main()
{
cout << "Hello World" << endl;
color canvas[5][5] = {
{red, green, green, blue, yellow},
{green, red, yellow, green, green},
{green, green, red, blue, green},
{red, green, green, green, yellow},
{red, yellow, red, blue, yellow}
};
//paint(screen, 5, 5, 1, 2, green);
for(int i=0; i<5; ++i){
for(int j=0; j<5; ++j)
cout<<canvas[i][j]<<" ";
cout<<endl;
}
cout << "after painting"<<endl;
paint(canvas, 5, 5, 1, 2, green);
for(int i=0; i<5; ++i){
for(int j=0; j<5; ++j)
cout<<canvas[i][j]<<" ";
cout<<endl;
}
return 0;
}
/*
Executing the program....
$demo
Hello World
0 3 3 2 1
3 0 1 3 3
3 3 0 2 3
0 3 3 3 1
0 1 0 2 1
after painting
0 3 3 2 1
3 3 3 3 3
3 3 3 3 3
0 3 3 3 1
0 1 0 2 1
*/