He perdido 3 días y
finalmente resolví una pregunta gráfica
utilizada para
encontrar la distancia más corta
usando BFS
Quiere compartir la experiencia.
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
He perdido 3 días probando todas las alternativas anteriores, verificando y volviendo a verificar una y otra vez por encima de
que no son el problema.
(Intente pasar tiempo buscando otros problemas, si no encuentra problemas con los anteriores 5).
Más explicación del comentario a continuación:
A
/ \
B C
/\ /\
D E F G
Suponga que arriba el gráfico de su gráfico
va hacia abajo
Para A, los adyacentes son B y C
Para B, los adyacentes son D y E
Para C, los adyacentes son F y G
digamos, el nodo de inicio es A
cuando llega a A, a, B y C, la distancia más corta a B y C desde A es 1
cuando alcanza D o E, a través de B, la distancia más corta a A y D es 2 (A-> B-> D)
de manera similar, A-> E es 2 (A-> B-> E)
también, A-> F y A-> G es 2
Entonces, ahora en lugar de 1 distancia entre nodos, si es 6, entonces simplemente multiplique la respuesta por 6
ejemplos,
si la distancia entre cada uno es 1, entonces A-> E es 2 (A-> B-> E = 1 + 1 )
si la distancia entre cada uno es 6, entonces A-> E es 12 (A-> B-> E = 6 + 6)
sí, bfs puede tomar cualquier ruta
pero estamos calculando para todas las rutas
si tiene que ir de A a Z, entonces recorremos todos los caminos desde A hasta un I intermedio, y dado que habrá muchos caminos, descartamos todos menos el camino más corto hasta I, luego continuamos con el camino más corto hasta el siguiente nodo J
nuevamente si hay múltiples rutas de I a J, solo tomamos un
ejemplo más corto ,
supongamos,
A -> I tenemos distancia 5
(PASO) supongamos, I -> J tenemos múltiples rutas, de distancias 7 y 8, ya que 7 es más corto
tomamos A -> J como 5 (A-> I más corto) + 8 (más corto ahora) = 13,
entonces A-> J es ahora 13
, repetimos ahora arriba (PASO) para J -> K y así sucesivamente, hasta obtener a Z
Lea esta parte, 2 o 3 veces, y dibuje en papel, seguramente obtendrá lo que estoy diciendo, la mejor de las suertes