Я знаю, что доступно много алгоритмов для вычисления кратчайшего пути между двумя точками на графике или сетке, например, все пары в ширину (Флойд), Дейкстра.
Однако, как я заметил, все эти алгоритмы вычисляют все пути в этом графе или сетке, а не только те, которые находятся между двумя интересующими нас точками.
МОЙ ВОПРОС:
если у меня есть сетка, то есть двумерный массив, и мне интересно вычислить кратчайший путь между двумя точками, скажем, P1 и P2, и если есть ограничения на то, как я могу двигаться по сетке (например, только по диагонали или только по диагонали и вверх и т. д.),
какой алгоритм может это вычислить?
Обратите внимание, что если у вас есть ответ, я бы хотел, чтобы вы опубликовали название алгоритма, а не сам алгоритм (конечно, даже лучше, если вы также опубликуете алгоритм); например, алгоритм Дейкстры, Флойда или любой другой.
Пожалуйста, помогите мне, я думал об этом в течение нескольких месяцев!
Окей, ребята, я нашел этот алгоритм на TOPCODER.COM
здесь в сетке вы можете двигаться только (по диагонали и вверх)
но я не могу понять, что это за алгоритм, каким-либо образом кто-нибудь может знать?
#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);
}
};