2016-03-23 13 views
1

駅のリストを考えてみましょう。駅間の列車でつながっている「A」から「J」の10駅です。すなわち 各ステーションは任意ステーション直接または他の 介しから到達可能である、連結グラフを形成するためのステーション(頂点)と、それらの間 を実行列車(エッジ)を考慮し、グラフの点で出発地から目的地までの最短の旅時間

しかし完全ではありません、ホップすることによりステーション。最も重要なことは、これらのホップは、到着と出発の隣の間 待機が含まれています。間違いなく、接続された2つのステーション間の移動時間は、独立しています( )。ただし、 次の出発までの待ち時間は、到着した場所によって異なります。

注:私は理解を助けるためにグラフを述べます。一つは、それを超えて考えることができます。

問題:は、2つのステーションを考えると、最初の駅からの開始時間を、どのように、目的地までの最短時間を見つけるためにホップの場合は到着と出発の間の待機時間をカウント?同じDSにはどんなDSが使われますか? 2つのステーションが列車で接続されている場合、それらの列車の間には列車が1つしかないと仮定します。

+0

さらに詳しく説明すると、「C」と「D」の間の列車を想定します。また、 'A'または 'B'のいずれかから 'C'に到着できるとします。駅 'C'での列車の待ち時間は 'D'ですので、 'A'または 'B'から 'C'に到着したかどうかによって異なります。しかし、「C」から「D」への旅時間は、「C」にいつ、どのように到着したかに関係なく同じです。 –

+0

https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm =>ある駅を別の駅に行く時間が同じではないと仮定します。 – Mukit09

+1

@MukitChowdhury - ダイクストラは、これらの「ホップ」のためにここでは十分ではありません。 – libik

答えて

0

IMHO Dijkstraで十分です。

ノード "A"からDijkstraを実行すると、他のすべてのノードへの最短パスが検出されます。

「ホップ」がある場合でも、最悪の場合は、ある駅に早く行き、後で別のルートで後で同じ列車に入るのを待たなければなりません。

唯一の違いは、あなたが本当の「到着/出発」を有する列車によって引き起こされる

この動作だけ「の旅行の時間」の代わりに「旅の待ち時間+時間の時間」として価格を数えること、です。

すべてのノードの組み合わせA1 - > A2 - > A3のすべてのA2ノードの各ルートがA1からA3までランダムにペナルティを受ける場合、それは予測できないと思います。

+0

ダイクストラは答えではありません。 source = 'A'、dest = 'J'の 'A'、 'B'、 'J'を考えてみましょう。 「A」は朝6の電車で「J」に接続されており、2時間かかります。 「A」は正午12時に列車で「B」に接続され、夕方6時には「B」が「J」に接続され、3時間かかります。旅行者が朝5時に出発すると、「A」から「J」は最短です。ただし、午前10時に出発すると、「B」を経由して「J」に到着し、11時間後に目的地に到着することができます。私たちは合計時間を最小にしたいので、このルートは彼/彼女のために最短です。 –

+0

@SubhajitKundu - これはダイクストラが修正するものです。 「価格」は、待機時間と移動時間の合計時間です。午前10時に出発すると、最短経路はA→Bであり、「2時間待機+ 3時間走行= 5時間」であるため、最初のノードが開かれます。それから、B - > Jの場合、もう一度時間の "総量"を測定します。これはA - > Jより安くなります。 – libik

+0

@SubhajitKundu - 唯一の違いは、あなたがどこかに来るたびに価格を数えなければならないということです到着の正確な時刻としてcarring。わずかしか難しくはありませんが、dijksra自体には全く変更はありません。 – libik

関連する問題