Directorio de artículos
Descripción del problema
Hay una cuadrícula con m filas yn columnas en el suelo, desde las coordenadas [0,0] a las coordenadas [m-1, n-1]. Un robot es fácil de entender desde la cuadrícula de coordenadas [0,0], puede mover una cuadrícula a la izquierda, derecha, arriba y abajo a la vez (no puede moverse fuera de la cuadrícula), ni puede ingresar la suma de coordenadas de fila y columna mayor que k De cada uno. Por ejemplo, cuando k es 18, el robot puede ingresar al cuadrado [35,37] porque 3 + 5 + 3 = 7 = 18. Pero no puede entrar al cuadrado [35,38] porque 3 + 5 + 3 + 8 = 19. ¿Cuántas cuadrículas puede alcanzar el robot?
Informe de resolución de problemas.
Simplemente busque directamente, BFS o DFS
Código de implementación
class Solution {
public:
int sum(int x){
int ans=0;
while(x){
ans+=(x%10);
x=x/10;
}
return ans;
}
int movingCount(int m, int n, int k) {
int ans=0,qnum,ox,oy,nx,ny;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
vector<bool>vis(m*n,false);
queue<int>q;
q.push(0);
vis[0]=true;
while(!q.empty()){
qnum=q.front();
q.pop();
ans++;
ox=qnum/n;
oy=qnum%n;
for(int index=0;index<4;index++){
nx=ox+dx[index];
ny=oy+dy[index];
if(nx>=0&&nx<m&&ny>=0&&ny<n&&!vis[n*nx+ny]&&
sum(nx)+sum(ny)<=k){
q.push(n*nx+ny);
vis[n*nx+ny]=true;
}
}
}
return ans;
}
};
Referencias
[1] Leetcode Interview Question 13. El rango de movimiento del robot.