演習は次のとおりです。
vとwを有向グラフG=(V、E)の2つの頂点とします。線形時間アルゴリズムを設計して、vとwの間の異なる最短経路(必ずしも頂点が互いに素である必要はない)の数を見つけます。注:Gのエッジは重み付けされていません
この物品税について、私は次のように要約します。
- 有向グラフです
- 異なる最短経路の数を要求します。まず、パスを最短にする必要があります。次に、長さが同じであるそのような最短パスが複数存在する場合があります。
- vとwの間なので、vからwとwからvの両方をカウントする必要があります。
- 線形時間。
- グラフは重み付けされていません。
上記の点から、私は次のように考えています。
- グラフは重み付けされておらず、単一のパスだけでなく、すべての最短パスを見つけようとしているため、ダイクストラのアルゴリズムを使用する必要はありません。
count
最短経路の数を維持しますglobal level
最初にvからBFSを使用し、情報も維持したいglobal level
毎回1ずつ増やしてから、BFSが新しいレベルに到達しますshortest level
wへの最短経路の情報も保持しています- 旅行中に初めてwに会うときは、とに
global level
割り当てshortest level
ますcount++
。 global level
に等しい限り、wに再び会うたびshortest level
に増加します。count
global level
が大きくなった場合は、shortest level
経路ではなく最短経路を探しているので、移動を終了します。- それから私はwからvのためにもう一度2-8をします
私のアルゴリズムは正しいですか?vからw、次にwからvを実行した場合でも、それは線形時間と見なされますか?