BFSを使用して
最短距離を見つける
ために使用される
グラフの質問を最終的に解決した3日間を無駄にしました
体験を共有したい。
When the (undirected for me) graph has
fixed distance (1, 6, etc.) for edges
#1
We can use BFS to find shortest path simply by traversing it
then, if required, multiply with fixed distance (1, 6, etc.)
#2
As noted above
with BFS
the very 1st time an adjacent node is reached, it is shortest path
#3
It does not matter what queue you use
deque/queue(c++) or
your own queue implementation (in c language)
A circular queue is unnecessary
#4
Number of elements required for queue is N+1 at most, which I used
(dint check if N works)
here, N is V, number of vertices.
#5
Wikipedia BFS will work, and is sufficient.
https://en.wikipedia.org/wiki/Breadth-first_search#Pseudocode
上記の方法をすべて試し、何度も確認と再確認を繰り返したところ
、問題はありませんでした。
(他の問題を探すのに時間を費やすようにしてください。もし上記の5の問題を見つけたら)。
以下のコメントからさらに説明:
A
/ \
B C
/\ /\
D E F G
上記は、グラフ
グラフが下向きになると仮定します
。Aの場合、隣接はB&Cです
。Bの場合、隣接はD&Eです
。Cの場合、隣接はF&Gです。
たとえば、開始ノードはAです
A、B、Cに到達したとき、AからB&Cまでの最短距離は1です。
DまたはEに到達し、Bを経由する場合、AおよびDへの最短距離は2(A-> B-> D)です。
同様に、A-> Eは2(A-> B-> E)です。
また、A-> F&A-> Gは2
したがって、ノード間の距離が1の代わりに、6の
場合、答えに6の例を掛けるだけです。各ノード間の
距離が1の場合、A-> Eは2になります(A-> B-> E = 1 + 1 )
それぞれの距離が6の場合、A-> Eは12(A-> B-> E = 6 + 6)
はい、bfsは任意のパスをとります
が、すべてのパスを計算しています
AからZに移動する必要がある場合は、Aから中間Iまですべてのパスを移動します。多くのパスがあるため、Iまでの最短パスを除いてすべてを破棄し、次のノードJまでの最短パスを
再び続行します。IからJへの複数のパスがあり、我々は、最短1つの取り
、例を
、仮定
Aを- >私たちは距離5持っている
、と仮定する(ステップ)I - > J 7が最短であるので、我々は、距離7&8の複数のパスを持っています
A-> Jを5(A-> I最短)+ 8(現在は最短)= 13と
みなし、A-> Jが13
になるように、J(> ST)でJ-> Kを繰り返します。 Zへ
この部分を2、3回読んで、紙に描くと、きっと私が言っていることがわかります。