Uno, Título Descripción
En segundo lugar, las ideas de resolución de problemas
versión avanzada de los diferentes caminos , dp
a la respuesta, está claro que la programación dinámica de dos dimensiones
- Definidos
dp
significados: Definición para venir coordenadas Este es el paseo - condiciones de contorno definidas
- Bajo ninguna obstrucción en la primera línea de la primera columna, la primera línea de la primera columna son sin duda un 1 porque sólo hay uno se mueve
- Sin embargo, si hay un obstáculo en la primera línea de la primera columna, sólo puede ir tan lejos como la parte delantera del obstáculo, incluyendo obstáculos detrás del punto donde su
dp
valor es 0
- El establecimiento de la ecuación de transición de estado
- Supongamos que el robot de corriente situado
, default
dp[i][j] = 0;
- Si el punto es que hay obstáculos, por lo que
dp[i][j]
sólo puede ser 0 - Si el punto es que no hay obstáculos
- Los puntos anteriores
- Hay obstáculos, a continuación, la ruta anterior está bloqueado, sólo puede venir de la izquierda, luego
dp[i][j]
la misma, más el 0 - No hay obstáculos, puede venir de arriba, entonces
dp[i][j] += dp[i - 1][j]
- Acabado:
dp[i][j] += (obstacleGrid[i][j - 1] ? 0 : dp[i][j - 1]);
- Hay obstáculos, a continuación, la ruta anterior está bloqueado, sólo puede venir de la izquierda, luego
- El punto de la izquierda
- Del mismo modo:
dp[i][j] += (obstacleGrid[i - 1][j] ? 0 : dp[i - 1][j]);
- Del mismo modo:
- Los puntos anteriores
- Si el punto es que hay obstáculos, por lo que
- Supongamos que el robot de corriente situado
, default
En tercer lugar, el Código de resolución de problemas
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
auto m = obstacleGrid.size();
auto n = obstacleGrid[0].size();
unsigned int dp[m][n];
bool flag = 0;
for(int i = 0; i < m; i++){
if(!obstacleGrid[i][0] && !flag)
dp[i][0] = 1;
else{
dp[i][0] = 0;
flag = 1;
}
}
flag = 0;
for(int i = 0; i < n; i++){
if(!obstacleGrid[0][i] && !flag)
dp[0][i] = 1;
else{
dp[0][i] = 0;
flag = 1;
}
}
for(int i = 1; i < m; i++){
for(int j = 1; j < n; j++){
dp[i][j] = 0;
if(obstacleGrid[i][j] == 0){
if(obstacleGrid[i][j - 1] == 0)
dp[i][j] += (obstacleGrid[i][j - 1] ? 0 : dp[i][j - 1]);
if(obstacleGrid[i - 1][j] == 0)
dp[i][j] += (obstacleGrid[i - 1][j] ? 0 : dp[i - 1][j]);
}
}
}
return dp[m - 1][n - 1];
}
};
En cuarto lugar, los resultados operativos
Hay un grupo de los resultados operativos muy arrogantes:
[[0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,1,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1], [0,0,0,0,0,1, 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0, 0,0], [1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1,1,0, 0,0,0,0,0,0,0,1,0,0,1], [0,0,1,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0], [0,0,0,1, 0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,1,1,0], [1,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0], [0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,0,0,1,0], [0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,1,1,0,0,0,1,0,0,0,0,0], [0,1,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0], [ 1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,1,0,0,0, 1,0,1,0,0,0,0,1], [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0], [0,1,0,1,0,0,0,0,1,0,0, 1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0], [0,1, 0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,1,1,0,1], [1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,1,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0], [ 0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,1,1, 0,1,0,0,0,0,1,1], [0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,1], [1,1,1,0,1,0,0, 0,0,1,0,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0, 0], [0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0, 0,0,0,0,0,0,0,0,1,1], [0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0]]0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0, 0,0,1,1,0,0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,1, 0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1], [0,1, 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0, 1,1,0,1,0,1], [1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0, 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1], [ 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, 1,0,0,0,1,0,0,0]]0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0, 0,0,1,1,0,0,1,0,0,0,0,0,0], [0,0,1,0,0,0,0,0,0,0,1, 0,0,1,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,0,1,1], [0,1, 0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0, 1,1,0,1,0,1], [1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0, 1,0,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,1], [ 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, 1,0,0,0,1,0,0,0]]
Un resultado directo de mi desbordamiento de datos, la historia que queremos contar dp
la matriz se establece en unsigned int
el tipo, a evitar desbordamiento