【LeetCode] Island_Mediumタグの695の最大面積:DFS / BFS

空でない2次元配列を指定  grid 0と1つの島は、の基で  1の(を表すランド)4方向接続(水平または垂直)あなたは水に囲まれているグリッドのすべての4つのエッジをとることができます。

所与の2Dアレイにおける島の最大面積を見つけます。(何島がない場合、最大の面積は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方向的に接続されなければならないので答えは、11ないことに注意してください。

例2:

[0,0,0,0,0,0,0,0]

上記のグリッドを考えると、返します  0

注:指定された各次元の長さが  grid 50を超えません。

 

このBFSの基本的な主題である、2次元配列、各グリッド[i]の[j]を掃引するループのための2つが1であり、最終的には、取得したサイズとANSを比較するために、再びBFSを行く、前に訪れた、とされていない場合復帰はANS。

T:O(M * N)

 

コード

クラスのソリューション(オブジェクト):
     デフmaxAreaOfIsland(自己、グリッド):
         "" " タイプグリッド:リスト[一覧[INT] 
        :RTYPE:int型
        """ 
        LR、LC、dirsに、訪問し、ANS、キュー = LEN(グリッド)、lenの(グリッド[0])、[(1、0)、(-1、0)、(0、-1)、(0、1 )]、セット()、0、collections.deque()
         のために I における範囲(LR)
             のための J における範囲(LC):
                 もしグリッド[I] [J] == 1 (i、j)はしない 訪問:
                    サイズ = 0 
                    queue.append((i、j)は)
                    visited.add((i、j)の)
                    一方キュー:
                        R、C = queue.popleft()
                        サイズ + = 1
                         用の D1、D2 DIRS:
                            NR、NC = R + D1、C + D2
                             であれば 0 <= NR < LR および 0 <= NC <LC 及び(NR、NC)しない 訪問グリッド[NR] [NC] == 1 
                                queue.append((NR、NC))
                                visited.add((NR、NC)) = MAX(年齢、サイズ)
         の戻り

 

おすすめ

転載: www.cnblogs.com/Johnsonxiong/p/11920936.html