深さ優先探索のLeetcode(DFS)テーマ別-733。画像レンダリング(塗りつぶし)
問題解決の深さ優先探索の詳細、クリックしてください
各整数は、画像のサイズの画素値を、0〜65535の値を表す整数の2次元配列の画像の表現が存在する間は。 あなたに与える座標(SR、SC)が画像描画ピクセル値(行、列)と新しいカラー値newcolorは開始を示し、このイメージあなたは再色を可能にします。 色の仕事を完了するために、最初の座標から、四方記録同じ画素に接続された画素の初期座標の値と、4つに対応する4つの方向でそれらを修飾再度記録画素を初期座標同じ初期ポイント、...の画素座標の画素値に接続され、プロセスが繰り返されます。すべての色が新しい値にピクセルのカラー値を記録しました。 最後に、演色を介して画像を返します。 例 1 : 入力: 画像 = [[1,1,1]、[1,1,0]、[1,0,1 ]] SR = 1、SC = 1、newcolorは= 2 出力:[[ 2,2- 、2]、[2,2,0]、[2,0,1 ]] 分析: 画像の中央に、(座標値(SR、SC) =(1,1 ))、 全ての対象のパスで色のピクセルが2に変更されました。 ピクセルは、右下隅2に変化しないように注意し 、それが初期点に接続された垂直及び水平4つの方向の画素ではないからです。 注: 画像と[ 0]、50範囲[1の長さの]インサイド。 原点分析を満たす 0 <= SR <image.length及び0 <= SC <画像[0 ] .LENGTH。 画像[I] [J]と範囲に示す色値newcolorは[ 0、65535]以内。
シンプルな困難があってもVIS配列は、ライン上の4つの方向の直接検索を持っていません。
ACコード:
クラスソリューション{ INT DIRX [] = {0,0,1、-1 }。 INT DIRY [] = {1、-1,0,0 }。 公共 のint [] [] FLOODFILL(INT [] []画像、INT SR、INT SC、INT newcolorは){ 場合(画像== NULL || image.length == 0)リターン画像。 もし(画像[SR] [SC] == newcolorは)戻り画像。 DFS(画像、SR、SC、newcolorは、画像[SR] [SC])。 リターン画像; } 公共 ボイド DFS(INT [] []画像、INT SR、INT SC、INT newcolorは、INT 値){ 画像[SR] [SC] = newcolorは。 以下のために(int型、iは4 <; I = 0 iは++ ){ int型 XX = SR + DIRX [I]。 INT YY = SC + DIRY [I]。 もし(XX> = 0 && YY> = 0 && XX <image.length && YY <画像[0] .LENGTH &&画像[XX] [YY] == 値){ DFS(画像、XX、YY、newcolorは、値); } } } }