"Длина" пути - это количество ребер в пути.
Учитывая исходную и целевую вершину, я хочу найти количество путей из исходной вершины в целевую вершину заданной длины k.
-
Мы можем посещать каждую вершину столько раз, сколько хотим, поэтому, если путь от
a
доb
будет выглядеть следующим образом:a -> c -> b -> c -> b
считается действительным. Это означает, что могут быть циклы, и мы можем проходить через пункт назначения не один раз. -
Две вершины могут быть соединены более чем одним ребром. Поэтому, если вершина
a
вершинаb
связана двумя ребрами, то пути,a -> b
через ребро 1 иa -> b
через ребро 2 считаются разными. -
Число вершин N равно <= 70 и K, длина пути равна <= 10 ^ 9.
-
Поскольку ответ может быть очень большим, он должен сообщаться по модулю некоторого числа.
Вот что я думал до сих пор:
Мы можем использовать width-first-search без выделения каких-либо вершин в качестве посещенных, на каждой итерации мы отслеживаем количество ребер 'n_e', который мы требовали для этого пути, и product 'p' числа повторяющихся ребер, каждое ребро в нашем пути имеет.
Поиск поиска должен заканчиваться, если n_e
больше k, если мы когда-либо добираемся до пункта назначения с n_e
, равным k, мы завершаем поиск и добавляем p
к выводу количества путей.
Я думаю, что мы могли бы использовать поиск по глубине, а не по ширине первого поиска, так как нам не нужен кратчайший путь, а размер Q, используемый в широте первого поиска, может оказаться недостаточным.
Второй алгоритм, о котором я размышляю, что-то похожее на Алгоритм Флойда Варшалла, используя этот подход. Только нам не нужен кратчайший путь, поэтому я не уверен, что это правильно.
Проблема с моим первым алгоритмом заключается в том, что "K" может быть до 1000000000, и это означает, что мой поиск будет выполняться до тех пор, пока он не будет иметь 10 ^ 9 ребер, а n_e количество фронтов будет увеличено на 1 на каждом уровне, что будет очень медленным, и я не уверен, что он когда-либо закончится для больших ресурсов.
Поэтому мне нужен другой подход для решения этой проблемы; любая помощь будет принята с благодарностью.