2020年3月15日夜四時41分45秒
問題の説明:
非ヌルグリッド番号0と1の二次元配列を指定し、四の方向(水平または垂直)1(土地を表す)の組み合わせから形成された島です。あなたは、2次元マトリックスの四辺を水に囲まれていると仮定することができます。
地域で最大の島で与えられた2次元配列を探します。(何の島々が存在しない場合は、面積が0に戻ります)
例1:
[0,0,1,0,0,0,0,1,0,0,0,0,0]、
[0,0,0,0,0,0,0,1,1,1、 0,0,0]、
[0,1,1,0,1,0,0,0,0,0,0,0,0]、
[0,1,0,0,1,1,0、 0,1,0,1,0,0]、
[0,1,0,0,1,1,0,0,1,1,1,0,0]、
[0,0,0,0、 0,0,0,0,0,0,1,0,0]、
[0,0,0,0,0,0,0,1,1,1,0,0,0]、
[0、 0,0,0,0,0,0,1,1,0,0,0,0]
上記に与えられた行列6を返すべきです。島は4つだけ水平方向または垂直方向が「1」である含むので答えは、11であってはならないことに留意されたいです。
例2:
[0,0,0,0,0,0,0,0]]は
、上記のマトリックスの場合、0が返されます。
注意:
せいぜい50グリッド行列の所与の長さと幅。
同様の問題:
問題解決:
解決策:DFS
全体図を染色の連結成分は、現在記録中のパッチの数は、染色工程において染色し、最大値を持続できることを理解すべきで使用DFSを解きます。
時間複雑:O(MN)
INT [] [] DIRS =新しいINT [] [] {{ - 1,0}、{1,0}、{0、-1}、{0,1}}。 INT色= 1。 int型の面積= 0; int型のres = 0; 公共INT maxAreaOfIsland(INT [] []グリッド){ int型M = grid.length。 INT、N =グリッド[0] .LENGTH。 以下のために(INT I 0 =; I <M、I ++){ ため(INT J = 0であり、j <N; J ++){ IF(グリッド[I] [J] == 1){ 面積= 0。 DFS(グリッド、I、J、++色)。 RES = Math.max(RES、領域) } } } RESを返します。 } プライベートボイドDFS(INT [] []グリッド、int型のx、int型Y、INT色){ INT、M = grid.length。 INT、N =グリッド[0] .LENGTH。 グリッド[X] [Y] =色。 エリア+ = 1; (INT [] DIR:DIRS)用{ int型NX = X + DIR [0]。 INT NY = Y + DIR [1]。 IF(!NX <0 ||がnx> = M || NY <0 || NY> = N ||グリッド[NX] [NY] = 1)続けます。 DFS(グリッド、NX、NY、色)。 } }
対処方法2:互いに素セット