我知道有许多算法可用于计算图形或网格中两点之间的最短路径,例如广度优先、全对(Floyd's)、Dijkstra's。
然而,正如我所注意到的,所有这些算法都会计算该图形或网格中的所有路径,而不仅仅是我们感兴趣的两点之间的路径。
我的问题是: 如果我有一个网格,即一个二维数组,并且我有兴趣计算两点之间的最短路径,比如 P1 和 P2,以及我在网格上移动的方式是否受到限制(例如仅对角线,或仅对角线和向上等),什么算法可以计算这个?
请注意,如果您有答案,我希望您发布算法的名称而不是算法本身(当然,如果您也发布算法就更好了);例如,无论是 Dijkstra 的算法,还是 Floyd 的算法,或者其他什么。
请帮助我,我已经考虑了几个月了!
伙计们,我在 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);
}
};