Я провел небольшое исследование, и мне кажется, что мне не хватает одной маленькой части этого алгоритма. Я понимаю, как работает поиск в ширину, но не понимаю, как именно он приведет меня к конкретному пути, а не просто скажет мне, куда может пойти каждый отдельный узел. Думаю, самый простой способ объяснить мое замешательство - это привести пример:
Так, например, у меня есть такой график:
И моя цель - добраться от A до E (все ребра не взвешены).
Я начинаю с А, потому что это мое происхождение. Я ставлю A в очередь, после чего немедленно удаляю A из очереди и исследую его. Это дает B и D, потому что A соединен с B и D. Таким образом, я ставлю в очередь B и D.
Я удаляю B из очереди и исследую его, и обнаруживаю, что он ведет к A (уже исследованному) и C, поэтому я ставлю в очередь C. Затем я удаляю D из очереди и обнаруживаю, что он ведет к E, моей цели. Затем я удаляю C из очереди и обнаруживаю, что это также приводит к E, моей цели.
Я логически знаю, что самый быстрый путь - A-> D-> E, но я не уверен, как именно помогает поиск в ширину - как мне записывать пути, чтобы, когда я закончу, я могу проанализировать результаты и увидеть что кратчайший путь A-> D-> E?
Также обратите внимание, что я на самом деле не использую дерево, поэтому нет «родительских» узлов, только дочерние элементы.