Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Thuật toán tô màu Flood Fill trong C graphics

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ũ.