プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

フラッドフィルアルゴリズム


1つの行列が与えられます。マトリックスは1つの画面を表しています。画面の各要素(i、j)はピクセルとして示され、そのピクセルの色は異なる番号でマークされます。このアルゴリズムでは、ピクセルがすでに選択された前の色になっている場合、ピクセルは新しい色で塗りつぶされます。前の色が前の色でない場合、そのピクセルは塗りつぶされません。ピクセルを埋めた後、同じことを行うために、上、下、左、右のピクセルをチェックします。

アイデアは本当に単純です。まず、選択した位置が前の色で色付けされているかどうかを確認します。そうでない場合、アルゴリズムは機能しません。それ以外の場合は、そのピクセルを新しい色で塗りつぶし、4つの隣接ピクセルに対して繰り返します。

入力と出力

入力:画面マトリックス:1 1 1 1 1 1 1 11 1 1 1 1 1 0 01 0 0 1 1 0 1 11 2 2 2 2 0 1 01 1 1 2 2 0 1 01 1 1 2 2 2 2 01 1 1 1 1 2 1 11 1 1 1 1 2 2 1出力:フラッドフィル後のスクリーンマトリックス1 1 1 1 1 1 1 11 1 1 1 1 1 0 01 0 0 1 1 0 1 11 3 3 3 3 0 1 01 1 1 3 3 0 1 01 1 1 3 3 3 3 01 1 1 1 1 3 1 11 1 1 1 1 3 3 1 

アルゴリズム

 fillScreen(x、y、prevColor、newColor)

入力: 開始する(x、y)座標、前の色、および新しい色。

出力- 可能であれば、以前の色から新しい色に変更した後の画面。

(x、y)が画面範囲内にない場合に開始し、(x、y)≠prevColorの場合に戻り、screen [x、y]:=newColor fillScreen(x + 1、y、prevColor、 newColor)fillScreen(x-1、y、prevColor、newColor)fillScreen(x、y + 1、prevColor、newColor)fillScreen(x、y-1、prevColor、newColor)End 

 #include  #define M 8#define N 8using namespace std; int screen [M] [N] ={//画面の寸法と色{1、1、1、1、1、1、1 、1}、{1、1、1、1、1、1、0、0}、{1、0、0、1、1、0、1、1}、{1、2、2、2、2 、0、1、0}、{1、1、1、2、2、0、1、0}、{1、1、1、2、2、2、2、0}、{1、1、1 、1、1、2、1、1}、{1、1、1、1、1、2、2、1}}; void fillScreen(int x、int y、int prevColor、int newColor){//置換(x、y)の前の色、新しい色if(x <0 || x> =M || y <0 || y> =N)//ポイントが画面を超えたときreturn; if(screen [x] [y]!=prevColor)// point(x、y)にprevColorが含まれていない場合は、何も返しません。 screen [x] [y] =newColor; //色を更新しますfillScreen(x + 1、y、prevColor、newColor); //(x、y)の右側fi​​llScreen(x-1、y、prevColor、newColor); //(x、y)の左側fillScreen(x、y + 1、prevColor、newColor); //(x、y)の先頭のfillScreen(x、y-1、prevColor、newColor); //(x、y)の下部の場合} void FloodFill(int x、int y、int newColor){int prevColor =screen [x] [y]; //新しい色に置き換える前に色を取得しますfillScreen(x、y、prevColor、newColor);} int main(){int x =4、y =4、newColor =3; cout <<"前の画面:" < 

出力

<前>前の画面111 1 1 1 1 11 1 1 1 1 1 0 01 0 0 1 1 0 1 11 2 2 2 2 0 1 01 1 1 2 2 0 1 01 1 1 2 2 2 2 01 1 1 1 1 2 1 11 1 1 1 1 2 2 1更新された画面:1 1 1 1 1 1 1 11 1 1 1 1 1 0 01 0 0 1 1 0 1 11 3 3 3 3 0 1 01 1 1 3 3 0 1 01 1 1 3 3 3 3 01 1 1 1 1 3 1 11 1 1 1 1 3 3 1

  1. フロイドウォーシャルアルゴリズム

    Floyd-Warshallアルゴリズムを使用して、特定の重み付きグラフからすべてのペアの最短経路問題を見つけます。このアルゴリズムの結果として、グラフ内の任意のノードから他のすべてのノードまでの最小距離を表す行列が生成されます。 最初、出力行列はグラフの指定されたコスト行列と同じです。その後、出力行列はすべての頂点kを中間頂点として更新されます。 このアルゴリズムの時間計算量はO(V ^ 3)です。ここで、Vはグラフ内の頂点の数です。 入力と出力 Input: The cost matrix of the graph. 0 3 6 ∞ ∞ ∞ &

  2. Cグラフィックを使用したフラッドフィルアルゴリズム

    コンセプト 特定の長方形に関して、私たちのタスクは、フラッドフィルアルゴリズムを適用してこの長方形を塗りつぶすことです。 入力 rectangle(left = 50, top = 50, right= 100, bottom = 100) floodFill( a = 55, b = 55, NewColor = 12, OldColor = 0) 出力 メソッド //(a、b)の前の色OldColorと(a、b)の周囲のすべてのピクセルを新しい色 NewColorとfloodFill(a、b、NewColor、OldColor)に置き換える再帰関数 aまたはbが画面