Используйте BFS для решения задачи кратчайшего пути на невзвешенном графике.
Псевдо код:
Create Queue q;
push into q starting node and mark distance to starting node as 0.
while(q is not empty){
get n : first elemnt in the queue
get all connected nodes to n that are not yet visited and push them to the queue:
mark the distance to those node as the distance to n + 1.
}
Пример: предполагается, что ваш начальный узел равен 1.
соединения вы имеете в графике:
1->2, 1->3, 1->4
2->1, 2->3, 2->4
3->1, 3->2, 3->4
Установите посещаемый массив булевы: посетил 4 = {false, false, false, false} и массив расстояний dist 4 = {inf, inf, inf, inf} и родительский массив = {-1, -1, -1, -1}.
Теперь толкать узел 1 в очереди Q, установить его расстояние до 0 и родителя до 1 затем начать:
Итерация 1 состояние:
Queue = {1}
Dist = {0,inf,inf,inf}
visited= {true,false,false,false}
parent= {1,-1,-1,-1}
Итерация 2:
единственный узел в очереди - 1, вы выбираете его и нажимаете своих соседей на очередь, которые являются узлами: 2,3,4. обновить их расстояния
Queue = {2,3,4}
Dist = {0,1,1,1}
visited= {true,false,false,false}
parent= {1,1,1,1}
и так далее, пока вы не получите пустую очередь. (означает, что вы посетили все узлы).
В этом примере вы увидите, что расстояние до узла 3 равно Dist 3 = 1, родительский элемент этого узла является родительским 3 = 1 (в случае, если вы хотите восстановить путь).
для получения дополнительной информации проверки BFS, а также реализация в Python: Python BFS DFS или this
- это дорожный вес? среднее значение от 1 до 2 - это то же расстояние, что и от 1 до 3? @ user2923389 –
нет нет весов ... В этом списке пар, если я ищу соединение между 1 и 3, у меня есть возможные исходы: 1) (1,3) 2) (1,2) - (2,4) - (4,3) и, конечно, самый короткий из них - (1,3), а выход моей программы должен быть равен 1. Например, если кратчайший путь для 1 до 3 было (1,2) - (2,4) - (4,3), то выход моей программы должен быть 3, потому что есть три пары – user2923389
Можете ли вы добавить языковой тег? Или это слишком общий, может быть, тег 'algorithm' или что-то еще. Сначала это выглядит как Python, однако мы не можем читать ваши мысли, и добавление тега может помочь вам получить лучший ответ. – Adalee