Я потерял 3 дня
в конечном итоге решил вопрос графа
используется для
Нахождение кратчайшего расстояния
используя BFS
Хочу поделиться опытом.
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
Я потерял 3 дня, пробуя все вышеперечисленные альтернативы, проверяя и перепроверяя снова и снова выше
они не проблема.
(Постарайтесь потратить время на поиск других проблем, если вы не нашли каких-либо проблем с выше 5).
Более подробное объяснение из комментария ниже:
A
/ \
B C
/\ /\
D E F G
Предположим, выше ваш график
график идет вниз
Для A смежными являются B & C
Для B смежными являются D & E
Для C смежными являются F & G
скажем, начальный узел A
когда вы достигаете A, to, B & C, кратчайшее расстояние до B & C от A составляет 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 может идти любым путем
но мы рассчитываем для всех путей
если вам нужно перейти от А к Z, то мы пройдем все пути от А до промежуточного I, и, поскольку будет много путей, мы отбрасываем все, кроме кратчайшего пути до I, затем продолжаем с кратчайшим путем до следующего узла J
опять же, если есть несколько путей от I до J, мы берем только кратчайший
например,
предположим,
A -> у нас расстояние 5
(ШАГ) предположим, что I -> J, у нас есть несколько путей с расстояниями 7 и 8, так как 7 самое короткое
мы берем A -> J как 5 (A-> I самый короткий) + 8 (самый короткий сейчас) = 13
так что A-> J теперь 13
мы повторяем выше (STEP) для J -> K и так далее, пока не доберемся до Z
Прочтите эту часть 2 или 3 раза и нарисуйте на бумаге, вы, несомненно, получите то, что я говорю, удачи