Análisis mapa

 

Ahora tiene una mano de tamaño N x "mapa" de rejilla (rejilla) de N, por encima de cada "zona" (células) son etiquetados con 0 y 1 también. Donde 0 representa el océano, 1 en nombre de la tierra, ya sabes áreas marinas más alejado de áreas de tierra de cuál se trata? Por favor, devuelva el área al mar desde las zonas de tierra más próxima.

Estamos hablando aquí de la distancia "a distancia de Manhattan" (distancia Manhattan) :( x0, y0) y (x1, y1) la distancia entre las dos regiones es | x0 - x1 | + | y0 - y1 |.

Si hacemos un mapa del océano o única tierra, devuelva -1.

 

Ejemplo 1:

1 0 1

0 0 0

1 0 1

 

Entrada: [[1,0,1], [0,0,0], [1,0,1]]
de salida: 2
Explicación:
la distancia entre la zona de mar (1, 1) y el máximo de todas las zonas terrestres una distancia máxima de 2.

Ejemplo 2:

1 0 0

0 0 0

0 0 0

 

Entrada: [[1,0,0], [0,0,0], [0,0,0]]
de salida: 4
explicó:
la distancia entre las áreas marinas (2, 2) y el máximo de todas las zonas terrestres una distancia máxima de 4.
 

consejos:

1 <= grid.length == cuadrícula [0] .length <= 100
cuadrícula [i] [j] no es 0 1

clase Solution {
 público :
     int maxDistance (vector <vector < int >> y rejilla) {
         int n = grid.size ();
        int dp [n] [n];
        int INF = 201 ;
        int ans = - 1 ; 
        
        para ( int i = 0 ; i <n; i ++ ) {
             para ( int j = 0 ; j <n; j ++ ) {
                 int dejó;
                int arriba; 
                
                si (rejilla [i] [j] ==0 ) {
                     si (i == 0 ) arriba = INF;
                    más  si (rejilla [i- 1 ] [j] == 1 ) arriba = 1 ;
                    más arriba = dp [i- 1 ] [j] + 1 ; 

                    si (j == 0 ) izquierda = INF;
                    más  si (rejilla [i] [j- 1 ] == 1 ) izquierda = 1 ;
                    más a la izquierda = dp [i] [j- 1 ] + 1 ; 

                    dp [i] [j]= Min (izquierda, arriba); 
                } 
                Más { 
                    dp [i] [j] = INF; 
                } 
            } 
        } 

        Para ( int i = n- 1 ; i> = 0 ; i-- ) {
             para ( int j = n- 1 ; j> = 0 ; j-- ) {
                 int derecho;
                int abajo; 
                
                si (rejilla [i] [j] == 0 ) {
                     si (i == n- 1 ) hacia abajo =CNI;
                    más  si (rejilla [i + 1 ] [j] == 1 ) hacia abajo = 1 ;
                    más abajo = dp [i + 1 ] [j] + 1 ; 

                    si (j == n- 1 ) derecha = INF;
                    más  si (rejilla [i] [j + 1 ] == 1 ) derecha = 1 ;
                    otra cosa derecha = dp [i] [j + 1 ] + 1 ; 

                    dp [i] [j] = min (dp [i] [j], min (derecha, abajo)); 
                } 
                demás{ 
                    Dp [i] [j] = INF; 
                } 
            } 
        } 

        Para ( int i = 0 ; i <n; i ++ ) {
             para ( int j = 0 ; j <n; j ++ ) {
                 si (rejilla [i] [j] == 0 ) { 
                    ans = max (dp [i] [j], American National Standard); 
                } 

            } 
        } 

        Retorno ? Ans => INF - 1 : ans; 
    } 
};

Ideas de resolución de problemas: Recuerde robot andante diferentes caminos que se trata no? De hecho, esto es casi con esto, también se puede hacer con DP. Sólo dp dos veces, una vez más desde la parte superior izquierda a la inferior derecha, de nuevo desde la parte inferior derecha a la esquina superior izquierda. Dp continuación, iterar sobre la matriz, encontrar la distancia máxima en los nodos del océano bien.

 Cabe señalar, no pueden separarse dp dos veces, dp debe utilizar una matriz.

La razón es la siguiente:

0 1

0 0

Si dos dp, entonces el segundo dp en el cálculo de la distancia mínima en la esquina inferior derecha de la Figura 2 puede ser, porque cuando sólo calcula utilizar el derecho de información y a continuación, pero no hizo uso de la información anterior.

Esto llevó a la esquina inferior izquierda de la figura en el cálculo de la distancia no se puede utilizar la información en la esquina superior derecha, como si compartir un dp, a continuación, la esquina inferior derecha en el cálculo de la computación inferior y óptica no es la distancia correcta, sino también consigo mismo en la primera pasada cuando el dp distancia se describe mediante la comparación de las distancias dp descrito primero pase contiene información de la esquina superior derecha, la esquina inferior derecha de la segunda pasada, cuando se calcula la distancia dp 1, y sólo si, con la esquina inferior derecha información a la esquina superior derecha cuando la esquina inferior izquierda a la esquina superior derecha de la información utilizada en la esquina inferior derecha.

Supongo que te gusta

Origin www.cnblogs.com/olajennings/p/12596112.html
Recomendado
Clasificación