金鉱労働者(LeetCodeミディアム難易度)問題への1129年問題の解決(DFS)

件名の説明:

 

 

二次元のネットワーク、任意の始点と終点を考えます。各ステップは、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 }

 

 

 

おすすめ

転載: www.cnblogs.com/vibe/p/11735732.html