数クローズド諸島のクローズ島々の数のLEETCODE 5257.統計

住所  https://leetcode-cn.com/contest/weekly-contest-162/problems/number-of-closed-islands/

2次元マトリクスが存在する  grid (マークに、ランド上のいずれかの各位置は、  0 ()符号のためのいずれかの水です  1 )。

私たちは行く4程度の隣接する領域の指示の下、1つの陸塊から各缶を進める、と我々は呼んでますすべての土地面積、に行ってきました「島」を

で完全に水に囲まれた島、海のエッジの周りのすべての隣接する土地の面積がアップしているとダウンなら、私たちは「島を閉じた。」それを呼び出します

閉じられた島の数を返却してください。

 

例1

入力:グリッド= [1,1,1,1,1,1,1,0]、 [1,0,0,0,0,1,1,0]、[1,0,1,0、 1,1,1,0]、[1,0,0,0,0,1,0,1]、[1,1,1,1,1,1,1,0]
出力:2
説明:
島は完全に水に囲まれているため、島島灰色の領域は、閉じている(すなわち、領域が囲まれています)。

 

例2

入力:グリッド= [0,0,1,0,0]、 [0,1,0,1,0]、[0,1,1,1,0]
出力:1

 

例3

入力:グリッド= [1,1,1,1,1,1,1]、
[1,0,0,0,0,0,1]、
[1,0,1,1,1,0、 1]、
[1,0,1,0,1,0,1]、
[1,0,1,1,1,0,1]、
[1,0,0,0,0,0,1] 、
[1,1,1,1,1,1,1]
出力:2

 

 

DFSを使用すると、0の境界線で通信した場合の問題に対する基本的な解決策を見つけることです

ここはアイデアやチェックの別のセットを提供します

島の最後の残りのセットを削除するために伝え、その後、すべての検出マージ土地0土地の境界のマーカーとは、閉じられました

コード

1  クラスソリューション{
 2  公共3      
4  INT MAX_NUM。
5ベクトル<ベクトル< int型 >> フィールド。
6ベクター< INT > FA。
7ベクター< INT > ADDX。
8ベクトル< 整数 > アディ。
9  ボイドのinit(int型N)
 10  {
 11      のためにINTは iは= 0 ; iが<= N; I ++ 12          のFA [I] = I。
13 }
 14  のint  GETINT X)
 15  {
 16      リターン FA [X] X X == :? FA [X] = GET(FA [X]); // 鎖構造を防ぐためにパスコンプレッサ、
17  }
 18である ボイド(マージINT X、INT Y)
 。19  {
 20は、      FA [ GET(X)] = GET (Y)
 21である }
 22である // ======================= ========================= 
23で 無効確認(int型の X、int型 Y、ベクトル<ベクトル< int型 >>&グリッド)
 24  {
 25      のためにINT iは= 0 ; I < 4 ; I ++ ){
 26          、INT newx = X + ADDX [I];
27          INT newy = Y + アディ[I]。
28  
29          であれば(newx> = 0 && newx <grid.size()&& newy> = 0 && newy <グリッド[ 0 ] .size()
 30              &&グリッド[newx] [newy] == 0 31          {
 32              INT IDX = X *グリッド[ 0 ] .size()+ Y。
33              INTanotherIdx = newx *グリッド[ 0 ] .size()+ newy。
34              マージ(IDX、anotherIdx)。
35          }
 36      }
 37  }
 38  
39  INT closedIsland(ベクトル<ベクトル< INT >>&グリッド){
 40      MAX_NUM = 110 41      フィールド=ベクトル<ベクトル< INT >>(MAX_NUM、ベクトル< INT > (MAX_NUM))。
42      FA =ベクトル< 整数 >(MAX_NUM * MAX_NUM + 1 )。
43      INIT(MAX_NUM * MAX_NUM)。
44     ADDX =ベクトル< 整数 > { 1、 - 100 }。
45      アディ=ベクトル< INT > { 00、 - 11 }。
46      のためにINT iが= 0 ; I <grid.size(); I ++ ){
 47          のためにINT J = 0 ; J <グリッド[ 0 ] .size(); J ++ ){
 48              であれば(グリッド[I] [jが] == 0 ){
 49                  チェック(I、J、グリッド)。
50              }
 51          }
 52      }
 53  
54      セット < INT > S。
55  
56      のためにINT iが= 0 ; I <grid.size(); I ++ ){
 57          のためにINT J = 0 ; J <グリッド[ 0 ] .size(); J ++ ){
 58              であれば(グリッド[i]は[ J] == 0 ){
 59                  INT IDX = I *グリッド[ 0 ] .size()+ J。
60                  s.insert(GET (IDX));
61              }
 62          }
 63      }
 64  
65      // エッジランド除去に関連する統計の互いに素なセットから
66の     ためのINT I = 0 ; I <grid.size(); I ++ ){
 67          のためにINT J = 0 ; J <グリッド[ 0 ] .size(); J ++ ){
 68              IF(グリッド[I] [J] == 0 &&(I == 0 || I grid.size ==() - 1 || J == 0グリッドJ == || [ 0 ] .size() - 1 )){
 69                  、INTIDX = I *はグリッド[ 0 ] .size()+ J。
70                  s.erase(GET (IDX));
71              }
 72          }
 73      }
 74  
75      戻りs.size()。
76  }
 77  
78 }。
コードの表示

 

おすすめ

転載: www.cnblogs.com/itdef/p/11830193.html