件名の説明:
二次元のネットワーク、任意の始点と終点を考えます。各ステップは、4つの方向に行くことができます。最も金の1行を検索するには。
「ストップへの条件まで行き続ける、道路黒行く。」にあることは明らかです
使用DFS(深さ優先探索)が解決しました。
任意の開始点ので、そう各ポイント次いで、各点から検索を開始し、隣接ポイントの検索。だから、繰り返し。
再帰終了条件:
1:国境を越えました。
2:検索も終了時点に来ています。
3:金遭遇ポイントゼロの数。
各ラインメモリ変数パラメータの合計値と金の電流量。
RESはたびに、戻り値の値を更新しました。
最初のマークされた点の探索、4つの隣接するドットが、点に隣接した後、元のマークの検索をキャンセルし、検索方向。
問題解決コード:
1 クラスソリューション{ 2つの 公共 int型 RES = -10000000 。 3 公共 int型の最大値= 0 ; 4 パブリック ブール [] [] VIS = 新しい ブール [20] [20 ]。 5 公共 INT getMaximumGold(INT [] []グリッド){ 6 のための(INT I = 0、I <grid.length; I ++ ){ 7 ための(int型 J = 0; J <グリッド[0] .LENGTH; J ++ ){ 8つの DFS(グリッド、I、J、0 ); 9 } 10 } 11の。 リターンRES; 12である } 13である 公共 ボイド DFS(INT [] []グリッド、INT I、INT J、INT SUM){ 14 15 IF(I <0 || J <0 || I> =グリッド。 J ||長さ> =グリッド[0] || .LENGTHグリッド[I] [J] == 0 || VIS [I] [J]){// 再帰終了条件 16 リターン; 17 } 18である VIS [I] [J] = trueに; // タグ 19 SUM = + グリッド[I]、[J]; // 更新値戻り 20は、 RES =Math.max(合計、RES); 21の DFS(グリッド、I-1 、J、合計)。 22の DFS(グリッド、I、J-1 、合計)。 23の DFS(グリッド、I + 1 、jの和); 24の DFS(グリッド、I、J + 1 、合計)。 25 VIS [I] [J] = 偽; // 取消标记 26 27 } 28 }