Алгоритма два: поиск в глубину и поиск в ширину.
В зависимости от прямизны рук, поиск в глубину потребует меньше памяти и отработает быстрее, зато поиск в глубину найдёт оптимальный (кратчайший по количеству хопов) путь. Для поиска в ширину потребуется либо модификация данных в графе, либо отдельно хранить уже посещённые узлы и узлы, которые обрабатываются на текущей итерации.
Ну и хорошо бы не впадать в шок при слове "рекурсия".)