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; } }