頂点 からなる無向グラフがあり、各辺の長さ(正の整数)は次のとおりである。ここに書かれていない辺はない。
| 辺 | 長さ | 辺 | 長さ | 辺 | 長さ |
|---|---|---|---|---|---|
| – | – | – | |||
| – | – | – | |||
| – | – | – |
各辺はどちらの向きにも通ることができ、経路の長さは通った辺の長さの和とする。 から への最短路(長さが最小の経路)は何本あるか求めよ。
始点から各頂点への最短距離 の表を作り、 を満たす辺だけを残して、 を始点から順に足し合わせ、最短路の本数を数えられる
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
重み(長さ)付きの有向グラフで、始点 から終点 への最短路が何本あるかを数える方法です。経路をすべて書き出す必要はありません。手順は三つに分かれます。まず各頂点への最短距離 の表を作り、次に最短路に使われうる辺だけを残し、最後に始点から順に本数を足し合わせます。道路網で最短ルートが何通りあるかを調べるときや、最短路がただ 1 本に決まるかを確かめるときに使います。
このページでは、経路を歩道として扱います。歩道とは、同じ頂点や辺を何度通ってもよい辺の並びのことです。辺の長さの合計が最小の歩道を最短路と呼び、その長さを 、本数を と書きます。始点から到達できる負の閉路はないものとします(ベルマン・フォード法で確かめます)。 の頂点は到達できないので無視します。
への最短路の最後の辺を (長さ )とします。この辺を除いた前半は への歩道で、長さは です。仮にこれが より長いとすると、前半を への最短路に取り替えたとき、 への歩道が より短くなってしまいます。これは矛盾なので、前半は への最短路で、 が成り立ちます。逆に、この等式を満たす辺があれば、 への任意の最短路の後ろにこの辺をつなぐと、長さちょうど の歩道、つまり最短路になります。この等式を満たす辺を「最短路の辺」と呼びます。すると への最短路は、最後に使う最短路の辺で重なりなく分けられます。最後の辺 を 1 本決めると、その最短路は への最短路と 1 対 1 に対応し、ちょうど 本あります。したがって和の法則から です。和は に入る最短路の辺すべてにわたってとります。出発点は で、これは長さ 0 の、何も進まない歩道 1 本にあたります。
残る問題は計算の順番です。最短路の辺だけでできた閉路があれば、その上で等式 を一周分足し合わせることができます。左右の が打ち消し合うので、閉路の長さの合計は 0 になります。そのため、辺の長さがすべて正なら、そのような閉路はありません。最短路の辺 では なので、 の小さい順に計算すれば、必要な はいつも計算済みです。長さ 0 や負の辺があるときは、最短路の辺の中に長さ 0 の閉路ができることがあります。その閉路上の頂点 から最短路の辺をたどって に行けるなら、 の最短路、閉路を 周、 の最短路の辺をつないだ歩道は、どれも長さ です()。よって は無限になります。一方、 に至れない閉路は への最短路には現れません。 への最短路に現れる頂点は、そこから最短路の辺で に至れるものだけだからです。そこで、最短路の辺で に至れる頂点だけを残します。その部分に閉路がなければ、各辺 で が より先に来る並べ方(位相順)がとれます。この順に計算すれば は有限の値として求まります。
最短距離の表を作る:ベルマン・フォード法で始点 から各頂点への を求め、負の閉路がないことを確かめる(辺の長さがすべて正の場合も同じ方法でよい)。 の頂点は捨てる。
最短路の辺を選ぶ:すべての辺 について が成り立つか調べ、成り立つ辺だけを残す。
閉路を調べて計算順を決める:残した辺をたどって に至れる頂点だけを残す。その中に閉路があれば、最短路は無限に多いので終了する。閉路がなければ、残した各辺 で が より先に来る順(位相順)に頂点を並べる。辺の長さがすべて正なら、 の小さい順がそのような順になる。
初期値を置いて順に足す: とし、決めた順に を計算する。和は、残した辺 すべてにわたってとる。同じ から への残った辺が複数あれば、その本数だけ を足す。
答えを読む: が から への最短路の本数である。
頂点 をもつ有向グラフがあり、辺とその長さは次のとおりである:, , , , , , , 。 から への最短路の本数を求めよ。
手順1(最短距離の表):ベルマン・フォード法を使います。初期値は 、他の頂点はすべて です。問題文の辺の順に緩和します。
1 周目:
- で 、 で
- : で変化なし
- で 。: で変化なし
- で 。: なので
- : で変化なし
2 周目はどの値も変わりません。1 周で変化がなければ、それ以降も変わりません。よって です。負の閉路はありません(さらに 1 周しても値が変わらないため)。
手順2(最短路の辺):
- ()、()、()は成立
- ()、()、()も成立
- ()と ()は捨てる
手順3(閉路と計算順):残した辺で、どの頂点からも に至れます。辺の長さはすべて正なので閉路はありません。 の小さい順 で計算します。
手順4(順に足す): から始めます。
-
-
-
-
手順5:最短路は 3 本です。実際、、、 はどれも長さ 5 です。
答え:
に入るすべての辺について を足してしまう誤り。例題で とするのは誤りです。正しくは を満たす辺だけを足し、 となります。
初期値を としてしまう誤り。こうすると全頂点で になります。正しくは、長さ 0 の何も進まない歩道が 1 本あるので です。
長さ 0 や負の辺があるのに の順で計算してしまう誤り。辺 , , では で、3 本とも最短路の辺です。ここで を より先に計算すると、まだ求まっていない を使ってしまいます( を 0 として とするのは誤り)。正しくは位相順 で計算し、、 です。
最短路の辺からなる長さ 0 の閉路の扱いを誤る誤り。たとえば , が両方とも最短路の辺になったとします。 から最短路の辺で に至れるなら、この閉路を何周しても長さ の歩道になるので、 は有限になりません。これを見落として有限の値を答えるのは誤りです。逆に、その閉路から に至れないのに「無限」と答えるのも誤りです。正しくは、最短路の辺で に至れる頂点だけを残し、そこに閉路がなければ位相順に計算して有限の を求めます。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
頂点 からなる無向グラフがあり、各辺の長さ(正の整数)は次のとおりである。ここに書かれていない辺はない。
| 辺 | 長さ | 辺 | 長さ | 辺 | 長さ |
|---|---|---|---|---|---|
| – | – | – | |||
| – | – | – | |||
| – | – | – |
各辺はどちらの向きにも通ることができ、経路の長さは通った辺の長さの和とする。 から への最短路(長さが最小の経路)は何本あるか求めよ。
6 つの地点 を結ぶ道路網があり、次の 9 本の道路はどれも両方向に通行できる。各道路の長さ(km)は次のとおりで、ここに書かれていない道路はない。
| 道路 | 長さ | 道路 | 長さ | 道路 | 長さ |
|---|---|---|---|---|---|
| – | – | – | |||
| – | – | – | |||
| – | – | – |
地点 から地点 へ行く経路のうち、通る道路の長さの合計が最小となる経路(最短路)は何通りあるか求めよ。
頂点 からなる無向グラフがあり、辺とその長さは次のとおりである。ここに書かれていない辺はない。
| 辺 | 長さ | 辺 | 長さ | 辺 | 長さ |
|---|---|---|---|---|---|
| — | — | — | |||
| — | — | — | |||
| — | — | — |
路の長さを、通る辺の長さの和とする。頂点 から頂点 への最短路(長さが最小の路)は何本あるか求めよ。