কম্পিউটার

ফ্লাড ফিল অ্যালগরিদম – সি++ এ পেইন্টে ফিল() কিভাবে প্রয়োগ করা যায়


এই সমস্যায়, আমাদেরকে 2-ডি স্ক্রীনের প্রতিনিধিত্ব করে একটি 2d ​​অ্যারে দেওয়া হয়েছে, স্ক্রীনে একটি পিক্সেলের স্থানাঙ্কগুলি রঙ এবং রঙে পূর্ণ হবে। আমাদের কাজ হল বর্তমান পিক্সেল এবং সেই রঙের সমস্ত সংলগ্ন পিক্সেলকে রঙ করার জন্য একটি প্রোগ্রাম তৈরি করা৷

পেইন্টে রঙ করা , আমরা একটি রঙ নির্বাচন করব এবং প্রদত্ত পিক্সেলে অ্যাব্রাশ সহ ক্লিক করব।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক

Input: Sceen[][] =
{{W, W, B, W, W, W, W, W},
{W, W, W, W, W, W, B, B},
{W, B, B, W, W, B, W, W},
{W, Y, Y, Y, Y, B, W, B},
{B, W, W, Y, Y, B, W, B},
{B, W, W, Y, Y, Y, Y, B},
{W, B, W, W, W, Y, W, W},
{W, W, B, B, W, Y, Y, W}};
X = 5, Y = 5, newColor = R.
Output:
{{W, W, B, W, W, W, W, W},
{W, W, W, W, W, W, B, B},
{W, B, B, W, W, B, W, W},
{W, R, R, R, R, B, W, B},
{B, W, W, R, R, B, W, B},
{B, W, W, R, R, R, R, B},
{W, B, W, W, W, R, W, W},
{W, W, B, B, W, R, R, W}};

ফ্লাড ফিল অ্যালগরিদম

এই অ্যালগরিদমে, পিক্সেলগুলি নতুন রঙে পূর্ণ হবে যখন এটি ইতিমধ্যে নির্বাচিত পূর্ববর্তী রঙে থাকবে। আগের রঙটি আগের রঙ না হলে সেই পিক্সেলটি পূর্ণ হবে না। একটি পিক্সেল পূরণ করার পরে, এটি একই কাজ করার জন্য তার উপরে, নীচে, বাম এবং ডান পিক্সেলগুলি পরীক্ষা করবে। এখানে আরও জানুন।

সমাধান পদ্ধতি

সমস্যা সমাধানের একটি পদ্ধতি হল পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করে। আমরা প্রথম পিনেলটি খুঁজে পাব যা আমাদের রঙ করতে হবে তারপর এর সমস্ত 4টি প্রতিবেশী পিক্সেল পরীক্ষা করুন। একই রঙের ফিট তারপর নতুন রঙ দিয়ে প্রতিস্থাপন করুন এবং বর্তমান পিক্সেলের প্রতিবেশীদের সাথে পুনরাবৃত্তি করুন। প্রতিবেশী পিক্সেল কোনো ভিন্ন রঙের হলে, এটি ছেড়ে দিন। এই ধাপগুলি অনুসরণ করুন যতক্ষণ না আপনি স্টার্টিং পিক্সেলের রঙের মতো একই রঙের সমস্ত সংলগ্ন পিনেল না পান। তারপর ফিলিং অ্যালগরিদম বন্ধ করুন।

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম

#include<iostream>
using namespace std;
#define M 8
#define N 8
void fillColorAdj(char screen[][N], int x, int y, char oldColor, char color){

   if (x < 0 || x >= M || y < 0 || y >= N)
      return;
   if (screen[x][y] != oldColor)
      return;
   if (screen[x][y] == color)
      return;
   screen[x][y] = color;

   fillColorAdj(screen, x+1, y, oldColor, color);
   fillColorAdj(screen, x-1, y, oldColor, color);
   fillColorAdj(screen, x, y+1, oldColor, color);
   fillColorAdj(screen, x, y-1, oldColor, color);
}
void fillColor(char screen[][N], int x, int y, char color){

   char oldColor = screen[x][y];
   if(oldColor==color) return;
   fillColorAdj(screen, x, y, oldColor, color);
}
int main(){

   char screen[M][N] = {{'W', 'W', 'B', 'W', 'W', 'W', 'W', 'W'},
      {'W', 'W', 'W', 'W', 'W', 'W', 'B', 'B'},
      {'W', 'B', 'B', 'W', 'W', 'B', 'W', 'W'},
      {'W', 'Y', 'Y', 'Y', 'Y', 'B', 'W', 'B'},
      {'B', 'W', 'W', 'Y', 'Y', 'B', 'W', 'B'},
      {'B', 'W', 'W', 'Y', 'Y', 'Y', 'Y', 'B'},
      {'W', 'B', 'W', 'W', 'W', 'Y', 'W', 'W'},
      {'W', 'W', 'B', 'B', 'W', 'Y', 'Y', 'W'},};
   int x = 5, y = 5;
   char color = 'R';

   cout<<"The initial screen cordinates are : \n";
   for (int i=0; i<M; i++){

      for (int j=0; j<N; j++)
         cout<<screen[i][j]<<"\t";
      cout<<endl;
   }

   fillColor(screen, x, y, color);
   cout<<"\nThe screen cordinates after coloring are : \n";
   for (int i=0; i<M; i++){

      for (int j=0; j<N; j++)
         cout<<screen[i][j]<<"\t";
      cout<<endl;
   }
}

আউটপুট

The initial screen cordinates are :
W   W   B   W   W   W   W   W
W   W   W   W   W   W   B   B
W   B   B   W   W   B   W   W
W   Y   Y   Y   Y   B   W   B
B   W   W   Y   Y   B   W   B
B   W   W   Y   Y   Y   Y   B
W   B   W   W   W   Y   W   W
W   W   B   B   W   Y   Y   W

The screen cordinates after coloring are :
W   W   B   W   W   W   W   W
W   W   W   W   W   W   B   B
W   B   B   W   W   B   W   W
W   R   R   R   R   B   W   B
B   W   W   R   R   B   W   B
B   W   W   R   R   R   R   B
W   B   W   W   W   R   W   W
W   W   B   B   W   R   R   W

  1. বন্যা পূরণ অ্যালগরিদম

  2. সি গ্রাফিক্স ব্যবহার করে ফ্লাড ফিল অ্যালগরিদম

  3. ইন্টারপোলেশন অনুসন্ধান অ্যালগরিদম বাস্তবায়নের জন্য C++ প্রোগ্রাম

  4. অ্যারে শাফলিংয়ের জন্য ফিশার-ইয়েটস অ্যালগরিদম বাস্তবায়নের জন্য C++ প্রোগ্রাম