У меня есть школьное задание на создание программы, которая получает график и обнаруживает минимальное остовное дерево с условием, что путь между двумя точками (которые предварительно выбраны при запуске) будет кратчайшим на КОЛИЧЕСТВО КРАЙ междуих.
Сама задача в порядке, но я борюсь за оптимизацию.Когда я нахожу свой путь между A и B (предварительно выбранные точки), я пытаюсь рекурсивно найти все другие возможные варианты по DFS, а затем делаю MST и выбираю наименьшее.Поскольку путь должен иметь наименьшее количество ребер, и я нашел один из этих путей по первой BFS, я знаю, что могу обрезать свой поиск в DFS после X рекурсий, где X - это число ребер между A в B, найденных в BFS.Он работает очень быстро в определенных типах графиков (где число ребер в 3 раза больше числа вершин), но когда ребра, например, в 10 раз больше, они просто работают без остановки.
Я попросил у моего друга подсказкуи он сказал мне, что он использует BFS для рекурсивного поиска других путей, и он в порядке, но в чем разница в производительности?Сначала DFS попытается сбежать и остановится, когда достигнет определенной точки или потеряет доступный прыжок, BFS сначала расширяется, а затем заканчивает все пути на одном и том же шаге глубины, но все равно я делаю то же самое количество прыжков правильно?
Чтоя здесь скучаю?Или я его неправильно понял?Спасибо за любые идеи.
РЕДАКТИРОВАТЬ: я пытался проверить, какие ребра я уже посетил в конкретном прогоне DFS, чтобы избежать перехода в противоположном направлении, обратно к точке, где я был и так далее, но это только генерируетсязадержка на определенной группе графиков, но не помогает заметно с другими.
EDIT2: количество переставленных ребер и вершин (не может быть больше вершин, чем ребер)