Como calcular o caminho mais curto entre dois pontos em uma grade

Eu sei que muitos algoritmos estão disponíveis para calcular o caminho mais curto entre dois pontos em um gráfico ou uma grade, como a largura em primeiro lugar, todos os pares (Floyd), Dijkstra.

No entanto, como observei, todos esses algoritmos calculam todos os caminhos nesse gráfico ou grade, não apenas aqueles entre os dois pontos nos quais estamos interessados.

MINHA PERGUNTA É: se eu tiver uma grade, ou seja, uma matriz bidimensional, e estiver interessado em calcular o caminho mais curto entre dois pontos, digamos P1 e P2, e se houver restrições na maneira como eu posso mover a grade (por exemplo, apenas na diagonal) , ou apenas na diagonal e para cima, etc.), que algoritmo pode calcular isso?

Observe aqui que, se você tiver uma resposta, gostaria que você publicasse o nome do algoritmo em vez do próprio algoritmo (é claro, ainda melhor se você também postar o algoritmo); por exemplo, se é o algoritmo de Dijkstra, ou o de Floyd, ou o que seja.

Por favor me ajude, eu estive pensando sobre isso por meses!

okey pessoal, encontrei esse algoritmo no TOPCODER.COM aqui na grade, você pode se mover apenas (na diagonal e para cima), mas não consigo entender qual algoritmo é esse, por qualquer meio que alguém poderia saber?

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

questionAnswers(8)

yourAnswerToTheQuestion