Я витратив 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
For B, суміжні - D & E
For C, суміжні - F&G
скажімо, пусковий вузол - A
коли ви дістанетесь до пункту A, до, 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 може взяти будь-який шлях,
але ми обчислюємо всі шляхи
якщо вам доведеться пройти від А до Я, тоді ми проїдемо всі шляхи від А до проміжного I, і оскільки буде багато шляхів, ми відкидаємо весь, крім найкоротшого шляху до I, то продовжуємо з найкоротшим шляхом вперед до наступного вузла J
знову, якщо Є декілька шляхів від I до J, ми беремо лише найкоротший один
приклад,
припустимо,
A -> I ми маємо відстань 5
(КРОК) припустимо, I -> J у нас є кілька шляхів, відстань 7 і 8, оскільки 7 найкоротший
ми приймаємо A -> J як 5 (A-> я найкоротший) + 8 (найкоротший зараз) = 13,
тому A-> J зараз 13,
ми повторюємося вище (КРОК) для J -> K і так далі, поки не отримаємо до Z
Прочитайте цю частину 2 або 3 рази, і намалюйте на папері, ви обов'язково отримаєте те, що я говорю, найкраще