したがって、再帰は私の強みではありません。値がゼロの場合、intのベクトルのベクトルを1で埋める再帰的なfloodFill関数を作成することに挑戦しました。私のコードは、私を超えた理由でセグフォールトを続けています。おそらく私のコードはその音をより明確にするでしょう。
これは、洪水で埋められるグリッドです。
vector<vector<int> > grid_;
これは、基本的にベクトルの操作を支援する関数のセットである「グリッド」と呼ばれる私が作成したオブジェクトに属しています。グリッドの値はすべてゼロに初期化されます。
これは私のフラッドフィル関数です:
void floodFill(int x, int y, Grid & G)
{
if (G.getValue(x,y))
{
G.setValue(x,y,1);
if(x < G.getColumns()-1 && x >= 0 && y < G.getRows()-1 && y >= 0)
floodFill(x+1,y,G);
if(x < G.getColumns()-1 && x >= 0 && y < G.getRows()-1 && y >= 0)
floodFill(x,y+1,G);
if(x < G.getColumns()-1 && x >= 0 && y < G.getRows()-1 && y >= 0)
floodFill(x-1,y,G);
if(x < G.getColumns()-1 && x >= 0 && y < G.getRows()-1 && y >= 0)
floodFill(x,y-1,G);
}
}
ここでの目的は、ポイントの値がゼロであるかどうかを関数にチェックさせ、ゼロである場合は1に変更することです。次に、その上のものが同じかどうかを確認する必要があります。これは、1が見つかるか、ベクトルの終わりに到達するまで行われます。次に、別の方向を試し、上記と同じ条件になるまで、以下同様に、洪水がいっぱいになるまで進み続けます。
誰かが私がこれを修正するのを手伝ってもらえますか?多分私に何が悪いのか教えてください?
ありがとう!