Computer >> Máy Tính >  >> Lập trình >> lập trình C

Thuật toán lấp đầy lũ sử dụng đồ họa C

Khái niệm

Đối với một hình chữ nhật nhất định, nhiệm vụ của chúng ta là lấp đầy hình chữ nhật này bằng cách áp dụng thuật toán lấp đầy.

Đầu vào

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

Đầu ra

Thuật toán lấp đầy lũ sử dụng đồ họa C

Phương pháp

// Một hàm đệ quy để thay thế màu trước 'OldColor' tại '(a, b)' và tất cả các pixel xung quanh của (a, b) bằng màu mới 'NewColor' và lũ lụt (a, b, NewColor, OldColor)

  • Nếu a hoặc b nằm ngoài màn hình, hãy quay lại.

  • Nếu màu của getpixel (a, b) giống với OldColor thì

  • Lặp lại cho trên, dưới, phải và trái.

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

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

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

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

Ví dụ

// Shows program to fill polygon using floodfill
// algorithm
#include <graphics.h>
#include <stdio.h>
// Describes flood fill algorithm
void flood(int x1, int y1, int new_col, int old_col){
   // Checking current pixel is old_color or not
   if (getpixel(x1, y1) == old_col) {
      // Putting new pixel with new color
      putpixel(x1, y1, new_col);
      // Shows recursive call for bottom pixel fill
      flood(x1 + 1, y1, new_col, old_col);
      //Shows recursive call for top pixel fill
      flood(x1 - 1, y1, new_col, old_col);
      // Shows recursive call for right pixel fill
      flood(x1, y1 + 1, new_col, old_col);
      // Shows recursive call for left pixel fill
      flood(x1, y1 - 1, new_col, old_col);
   }
}
int main(){
   int gd1, gm1 = DETECT;
   // Initializing graph
   initgraph(&gd1, &gm1, "");
   //Shows rectangle coordinate
   int top1, left1, bottom1, right1;
   top1 = left1 = 50;
   bottom1 = right1 = 300;
   // Shows rectangle for print rectangle
   rectangle(left1, top1, right1, bottom1);
   // Fills start cordinate
   int x1 = 51;
   int y1 = 51;
   // Shows new color to fill
   int newcolor = 12;
   // Shows old color which you want to replace
   int oldcolor = 0;
   // Calling for fill rectangle
   flood(x1, y1, newcolor, oldcolor);
   getch();
   return 0;
}

Đầu ra

Thuật toán lấp đầy lũ sử dụng đồ họa C