[LintCode] 663. Murs et portes

On vous donne amxn grille 2D initialisé avec ces trois valeurs possibles.

-1 - un mur ou un obstacle.
0 - Une porte.
INF - Infinity signifie une pièce vide. Nous utilisons la valeur  2^31 - 1 = 2147483647 pour représenter INF comme vous pouvez supposer que la distance à une porte est inférieure  2147483647.
Remplir chaque pièce vide avec la distance à sa grille le plus proche. S'il est impossible d'arriver à un  Gate, cette pièce doit rester rempli INF

Exemple

Exemple 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

example2

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


publique  classe Solution {
     / ** 
     * @param chambres: grille MXN 2D 
     * @return : rien
      * / 
    publics  vides wallsAndGates ( int [] [] chambres) {
         // écrire ici votre code de 
        file d' attente <cellule> file = nouvelle LinkedList <> ();
        int row = rooms.length;
        int col = chambres [0 ] .length;
        pour ( int i = 0; i <rangée; i ++ ) {
             pour ( int j = 0; j <col; j ++) {
                 Si (chambres [i] [j] == 0 ) {
                     // x correspond à i => rangée, correspond à y = j> col
                     // démarrer à partir du plus petit point de 
                    queue.offer ( nouvelle cellule (i, j , les chambres [i] [j])); 
                } 
            } 
        } 
        
        Int [] [] = directions nouvelle  int [] [] {{- 1, 0}, {1, 0}, {0, 1}, {0, 1 }};
        tandis que (! queue.isEmpty ()) { 
            cellule cabot = queue.poll ();
            pour ( int[] Dir: sens) {
                 int newX = cur.x + dir [0 ];
                int Newy = cur.y + dir [1 ];
                si (newX> = 0 && newX <&& ligne Newy> = 0 && Newy <&& col chambres [newX] [Newy] == Integer.MAX_VALUE) { 
                    chambres [newX] [Newy] = cur.val + 1 ; 
                    queue.offer ( nouvelle cellule (newX, Newy, des chambres [newX] [Newy])); 
                } 
            } 
        } 
    } 
} 

Class cellule {
     int x;
    int y; 
    int val;
    PubliqueTéléphone mobile ( int x, int y, int val) {
         ce .x = x;
        ce .y = y;
        ce .VAL = Val; 
    } 
}

 

Je suppose que tu aimes

Origine www.cnblogs.com/xuanlu/p/12521808.html
conseillé
Classement