[LintCode] 663壁やゲイツ

あなたがこれらの3つの値で初期化された2Dグリッドamxn与えられています。

-1 -壁や障害物。
0 -ゲート。
INF -インフィニティは、空室を意味します。私たちは、値を使用し  2^31 - 1 = 2147483647 ますが、ゲートまでの距離がより小さいことを想定することができるようINFを表現するために  2147483647
その最も近いゲートまでの距離にそれぞれの空室を埋めます。それが到達することは不可能である場合は  Gate、その部屋はで満たされたままにしてください INF

例1

Input:
[[2147483647,-1,0,2147483647],[2147483647,2147483647,2147483647,-1],[2147483647,-1,2147483647,-1],[0,-1,2147483647,2147483647]]
Output:
[[3,-1,0,1],[2,2,1,-1],[1,-1,2,-1],[0,-1,3,4]]

Explanation:
the 2D grid is:
INF  -1  0  INF
INF INF INF  -1
INF  -1 INF  -1
  0  -1 INF INF
the answer is:
  3  -1   0   1
  2   2   1  -1
  1  -1   2  -1
  0  -1   3   4

例2

Input:
[[0,-1],[2147483647,2147483647]]
Output:
[[0,-1],[1,2]]


パブリック クラスソリューション{
     / ** 
     * @paramの部屋:MXN 2Dグリッド
     * @return :何が
      * / 
    パブリック 無効 wallsAndGates(INT [] []部屋){
         // ここにコードの書き込み 
        キューを<セル>キュー= 新しい LinkedListの<> ();
        INT行= rooms.length。
        int型 COL =部屋[0 ] .LENGTH。
        以下のためにINT I 0 =; I <行; I ++ ){
             ためINT J = 0; J <COL、J ++){
                 場合(客室[I] [J] == 0 ){
                     // J => COLへのIに対応X =>行、Y対応
                     // 最小点から開始 
                    queue.offer(新しいセル(I、J 、部屋[i]は[J])); 
                } 
            } 
        } 
        
        INT [] []方向= 新しい INT [] [] {{ - 1,0}、{1,0}、{0、-1}、{0,1 }}。
        一方、(!queue.isEmpty()){ 
            細胞CUR = queue.poll()。
            以下のためのint型[] DIR:方向){
                 int型 newX = cur.x + DIR [0 ]。
                INT newY = cur.y + DIR [1 ]。
                もし(newX> = 0 && newX <行&& newY> = 0 && newY <COL &&ルーム[newX] [newY] == Integer.MAX_VALUEの){ 
                    ルーム[newX] [newY] = cur.val + 1 
                    queue.offer(新しいセル(newX、newY、部屋[newX] [newY])); 
                } 
            } 
        } 
    } 
} 

クラス細胞{
     int型のX。
    int型のy; 
    int型のval;
    公衆細胞(int型のx、int型 Y、INT ヴァル){
         この .X = X。
        この .Y = Y。
        この .val = valの; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/xuanlu/p/12521808.html