Tô màu vùng kín (hình chữ nhật) bằng thuật toán Flood Fill đệ quy.
Ý tưởng
- Từ điểm (x,y), nếu màu pixel = oldColor → đổi thành newColor
- Đệ quy 4 hướng: trên, dưới, trái, phải
- Dừng khi ra khỏi màn hình hoặc gặp màu khác oldColor
Ví dụ
Đầu vào - Hình chữ nhật (50,50)-(100,100), tô từ (55,55), newColor=12, oldColor=0
Chương trình mẫu
#include <graphics.h>
#include <stdio.h>
void floodFill(int x, int y, int newColor, int oldColor) {
if (getpixel(x, y) == oldColor) {
putpixel(x, y, newColor);
floodFill(x+1, y, newColor, oldColor);
floodFill(x-1, y, newColor, oldColor);
floodFill(x, y+1, newColor, oldColor);
floodFill(x, y-1, newColor, oldColor);
}
}
int main() {
int gd = DETECT, gm;
initgraph(&gd, &gm, "");
int left=50, top=50, right=300, bottom=300;
rectangle(left, top, right, bottom);
floodFill(51, 51, 12, 0);
getch();
closegraph();
return 0;
}
Kết quả
Hình chữ nhật được tô đầy màu 12 (đỏ) từ bên trong.
Lưu ý: Đệ quy có thể gây tràn stack nếu vùng lớn. Phiên bản không đệ quy dùng stack/queue an toàn hơn. graphics.h chỉ dùng cho Turbo C cũ.