基于C图形的洪水填充算法

给定一个矩形,您的任务是使用整体填充算法填充该矩形。 例如:

null
Input : rectangle(left = 50, top = 50, right= 100, bottom = 100)        flood( x = 55, y = 55, new_color = 12, old_color = 0)Output : 

图片[1]-基于C图形的洪水填充算法-yiteyi-C++库

Input : rectangle(left = 50, top = 50, right= 200, bottom = 400)        flood( x = 51, y = 51, new_color = 6, old_color = 0)Output :

图片[2]-基于C图形的洪水填充算法-yiteyi-C++库

 

整体填充算法填充新颜色,直到 旧的颜色搭配。 洪水填充算法:-

// A recursive function to replace previous// color 'oldcolor' at  '(x, y)' and all // surrounding pixels of (x, y) with new // color 'newcolor' andfloodfill(x, y, newcolor, oldcolor)1) If x or y is outside the screen, then   return.2) If color of getpixel(x, y) is same as   oldcolor, then 3) Recur for top, bottom, right and left.    floodFill(x+1, y, newcolor, oldcolor);    floodFill(x-1, y, newcolor, oldcolor);    floodFill(x, y+1, newcolor, oldcolor);    floodFill(x, y-1, newcolor, oldcolor); 

CPP

// program to fill polygon using floodfill
// algorithm
#include <graphics.h>
#include <stdio.h>
// flood fill algorithm
void flood( int x, int y, int new_col, int old_col)
{
// check current pixel is old_color or not
if (getpixel(x, y) == old_col) {
// put new pixel with new color
putpixel(x, y, new_col);
// recursive call for bottom pixel fill
flood(x + 1, y, new_col, old_col);
// recursive call for top pixel fill
flood(x - 1, y, new_col, old_col);
// recursive call for right pixel fill
flood(x, y + 1, new_col, old_col);
// recursive call for left pixel fill
flood(x, y - 1, new_col, old_col);
}
}
int main()
{
int gd, gm = DETECT;
// initialize graph
initgraph(&gd, &gm, "" );
// rectangle coordinate
int top, left, bottom, right;
top = left = 50;
bottom = right = 300;
// rectangle for print rectangle
rectangle(left, top, right, bottom);
// filling start coordinate
int x = 51;
int y = 51;
// new color to fill
int newcolor = 12;
// new color which you want to fill
int oldcolor = 0;
// call for fill rectangle
flood(x, y, newcolor, oldcolor);
getch();
return 0;
}


输出:-

图片[3]-基于C图形的洪水填充算法-yiteyi-C++库

 
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享