私は 2 種類のオブジェクトを持ってい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: この問題は、約 2 時間半で解決される予定です。