Создать матрицу смежности при создании графика. В то же время вы делаете это, создавая матрицы, состоящие из степеней матрицы смежности вплоть до количества узлов в графе. Чтобы определить, существует ли путь от узла u к узлу v , проверьте матрицы (начиная с M ^ 1 и перейдя к M ^ n ) и проверьте значение в ( u , v ) в каждой матрице. Если для какой-либо из проверенных матриц это значение больше нуля, вы можете остановить проверку, потому что соединение действительно существует. (Это также дает вам еще больше информации: мощность сообщает вам количество шагов между узлами, а значение указывает, сколько путей существует между узлами для этого номера шага.)
(Обратите внимание, что если вы знаете число шагов в самом длинном пути на вашем графике, по какой-то причине вам нужно только создать количество матриц до этой степени. Кроме того, если вы хотите сэкономить память, вы может просто хранить базовую матрицу смежности и создавать другие по мере продвижения, но для больших матриц, которые могут занять достаточно много времени, если вы не используете эффективный метод выполнения умножений, будь то из библиотеки или написанных на вашем владеть.)
Вероятно, было бы проще всего выполнить поиск в глубину или в ширину, хотя, как и другие предлагали, не только потому, что они сравнительно просты в реализации, но и потому, что вы можете генерировать путь между узлами по ходу работы. вместе. (Технически вы будете генерировать несколько путей и отбрасывать циклы / тупики по пути, но все что угодно.)