Ho perso 3 giorni alla
fine risolto una domanda del grafico
utilizzata per
trovare la distanza più breve
utilizzando BFS
Vuoi condividere l'esperienza.
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
Ho perso 3 giorni a provare tutte le alternative di cui sopra, verificando e ri-verificando ancora e ancora sopra
che non siano un problema.
(Cerca di passare il tempo a cercare altri problemi, se non trovi problemi con sopra 5).
Altre spiegazioni dal commento qui sotto:
A
/ \
B C
/\ /\
D E F G
Supponiamo che il grafico del
grafico vada verso il basso.
Per A, gli adiacenti sono B e C
Per B, gli adiacenti sono D ed E
Per C, gli adiacenti sono F e G
ad esempio, il nodo iniziale è A
quando si raggiunge A, a, B & C la distanza più breve da B & C da A è 1
quando raggiungi D o E, attraverso B, la distanza più breve da A e D è 2 (A-> B-> D)
allo stesso modo, A-> E è 2 (A-> B-> E)
inoltre, A-> F & A-> G è 2
Quindi, ora invece di 1 distanza tra i nodi, se è 6, quindi moltiplica la risposta per 6
esempio,
se la distanza tra ciascuno è 1, allora A-> E è 2 (A-> B-> E = 1 + 1 )
se la distanza tra ciascuna è 6, allora A-> E è 12 (A-> B-> E = 6 + 6)
sì, bfs può prendere qualsiasi percorso
ma stiamo calcolando per tutti i percorsi
se devi andare dalla A alla Z, percorriamo tutti i percorsi da A a un I intermedio, e poiché ci saranno molti percorsi scarteremo tutti tranne il percorso più breve fino a I, quindi continueremo con il percorso più breve davanti al nodo J
successivo se ancora ci sono più percorsi da I a J, prendiamo solo un
esempio più breve ,
assumiamo,
A -> I abbiamo distanza 5
(STEP) assumiamo, I -> J abbiamo percorsi multipli, di distanze 7 e 8, poiché 7 è il più breve
prendiamo A -> J come 5 (A-> I più corto) + 8 (il più breve ora) = 13
quindi A-> J ora è 13
, ripetiamo ora sopra (STEP) per J -> K e così via, finché non otteniamo a Z
Leggi questa parte, 2 o 3 volte, e disegna su carta, otterrai sicuramente quello che sto dicendo, buona fortuna