Как найти количество различных кратчайших путей между двумя вершинами в ориентированном графе и с линейным-временем?

Вот упражнение:

Пусть v и w — две вершины в ориентированном графе G = (V, E). Разработайте линейный-алгоритм времени для нахождения количества различных кратчайших путей (не обязательно непересекающихся вершин)между v и w. Примечание:ребра в G не взвешены


Для этой акцизы я резюмирую следующим образом:

  1. Это ориентированный граф
  2. Он запрашивает количество различных кратчайших путей . Во-первых, пути должны быть кратчайшими, тогда таких кратчайших путей с одинаковой длиной может быть несколько.
  3. между v и w, поэтому следует считать как от v до w, так и от w до v.
  4. линейное-время.
  5. График не взвешен.

Из вышеизложенного у меня следующие мысли:

  1. Мне не нужно использовать Алгоритм Дейкстры , потому что граф не взвешивается и мы пытаемся найти все кратчайшие пути, а не только один один.
  2. Я поддерживаю countколичество кратчайших путей
  3. Я хотел бы сначала использовать BFS из v, а также поддерживать global levelинформацию
  4. Я увеличиваю global levelна единицу каждый раз, затем BFS достигает нового уровня
  5. Я также сохраняю информацию shortest levelдля кратчайшего пути к w
  6. Когда я впервые встречаю w во время путешествия, я назначаю global levelshortest levelи count++;
  7. до тех пор, пока global levelравно shortest level, я увеличиваю countкаждый раз, когда снова встречаю w.
  8. если global levelстановится больше, чем shortest level, я прекращаю путешествие, потому что я ищу кратчайший путь, а не путь.
  9. Затем я снова делаю 2 -8 для w до v

Верен ли мой алгоритм? Если я сделаю v для w, а затем w для v,это все еще считается линейным-временем?

25
задан nbro 25 August 2015 в 22:58
поделиться