Ch8.6: write a method to paint-fill a closed ring with the same color

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 
*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值