Cómo calcular la ruta más corta entre dos puntos en una cuadrícula

Sé que hay muchos algoritmos disponibles para calcular la ruta más corta entre dos puntos en un gráfico o una cuadrícula, como la amplitud, todos los pares (Floyd's), Dijkstra.

Sin embargo, como noté, todos estos algoritmos calculan todas las rutas en ese gráfico o cuadrícula, no solo aquellas entre los dos puntos que nos interesan.

MI PREGUNTA ES: si tengo una cuadrícula, es decir, una matriz bidimensional, y estoy interesado en calcular la ruta más corta entre dos puntos, digamos P1 y P2, y si hay restricciones en la forma en que puedo moverme en la cuadrícula (por ejemplo, solo en diagonal , o solo en diagonal y hacia arriba, etc.), ¿qué algoritmo puede calcular esto?

Tenga en cuenta aquí que si tiene una respuesta, me gustaría que publique el nombre del algoritmo en lugar del algoritmo en sí mismo (por supuesto, incluso mejor si también publica el algoritmo); por ejemplo, ya sea el algoritmo de Dijkstra, o el de Floyd, o lo que sea.

Por favor, ayúdame, ¡he estado pensando en esto durante meses!

okey chicos, encontré este algoritmo en TOPCODER.COM aquí en la cuadrícula, solo se puede mover (en diagonal y hacia arriba), pero no puedo entender qué algoritmo es esto de ninguna manera, ¿alguien podría saberlo?

#include<iostream>
#include <cmath>

using namespace std;




inline int Calc(int x,int y)

{



if(abs(x)>=abs(y)) return abs(x);
int z=(abs(x)+abs(y))/2;
return z+abs(abs(x)-z);
 }

class SliverDistance
{


    public:
int minSteps(int x1,int y1, int x2, int y2)
{
    int ret=0;
    if(((x1+y1)&1)!=((x2+y2)&1))y1++,ret++;
    return ret+Calc(x2-x1,y2-y1);
}
};

Respuestas a la pregunta(8)

Su respuesta a la pregunta