我有两种对象,Ball
和Platform
。球有(x,y)
坐标,平台有(x_begin, x_end, y)
。最多可以有 80 个平台。
我被要求找到任何给定Ball
到地面的最短路径(y=0
)。请注意,此输出应仅为最小距离。
考虑到我认为最好使用蛮力的约束:计算到地面的所有可能距离,然后返回最小值。
我想我会写一个递归函数:首先计算到最近平台的垂直距离,然后分支到左右,然后再返回。断开条件是所有路径都到达地面时。
void calculateDistances(Ball b, vector<Platform> ps, vector<float>* distances)
{
//The idea is to have, for every branch
// distances[i] = vertical distance
// distances[i+1] = distance to right
// distances[i+2] = distance to left
Platform* p = NULL;
float d_y = verticalDistanceToNearestPlatform(ps, p); // "p" now holds the platform the ball is on
if (d_y == 0)
return; //already on floor
distances->push_back(d_y);
d_x_right = distanceToRightEdgeOfPlatform(p);
distances->push_back(d_x_right);
d_x_left = distanceToLeftEdgeOfPlatform(p);
distances->push_back(d_x_left);
}
这里的问题很明显......我到底如何使这个递归?
非常感谢!
PS:这个问题打算在大约两个半小时内解决。