使用 C 图形的洪水填充算法

cserver side programmingprogramming更新于 2025/4/22 5:52:17

概念

对于给定的矩形,我们的任务是应用洪水填充算法填充此矩形。

输入 

rectangle(left = 50, top = 50, right= 100, bottom = 100)
floodFill(a = 55, b = 55, NewColor = 12, OldColor = 0)

输出 

方法

// 一个递归函数,用新颜色"NewColor"和floodFill(a, b, NewColor, OldColor)替换"(a, b)"处的先前颜色"OldColor"和(a, b)的所有周围像素

  • 如果a或b在屏幕外,则返回。

  • 如果getpixel(a, b)的颜色与OldColor相同,则

  • Recur for top, bottom, right and left.

    floodFill(a+1, b, NewColor, OldColor);<

    floodFill(a-1, b, NewColor, OldColor);

    floodFill(a, b+1, NewColor, OldColor);

    floodFill(a, b-1, NewColor, OldColor);

示例

// 显示使用洪水填充算法填充多边形的程序
// 算法
#include <graphics.h>
#include <stdio.h>
// 描述洪水填充算法
void flood(int x1, int y1, int new_col, int old_col){
   // 检查当前像素是否为 old_color
   if (getpixel(x1, y1) == old_col) {
      // 用新颜色放置新像素
      putpixel(x1, y1, new_col);
      // 显示底部像素填充的递归调用
      flood(x1 + 1, y1, new_col, old_col);
      //显示顶部像素填充的递归调用
      flood(x1 - 1, y1, new_col, old_col);
      // 显示右侧像素填充的递归调用
      flood(x1, y1 + 1, new_col, old_col);
      // 显示左侧像素填充的递归调用
      flood(x1, y1 - 1, new_col, old_col);
   }
}
int main(){
   int gd1, gm1 = DETECT;
   // 初始化图形
   initgraph(&gd1, &gm1, "");
   //显示矩形坐标
   int top1, left1, bottom1, right1;
   top1 = left1 = 50;
   bottom1 = right1 = 300;
   // 显示用于打印矩形的矩形
   rectangle(left1, top1, right1, bottom1);
   // 填充起始坐标
   int x1 = 51;
   int y1 = 51;
   // 显示要填充的新颜色
   int newcolor = 12;
   // 显示要替换的旧颜色
   int oldcolor = 0;
   // 调用填充矩形
   flood(x1, y1, newcolor, oldcolor);
   getch();
   return 0;
}

输出


相关文章