Хорошо, предыстория проблемы:
Я пишу небольшое приложение, которое просматривает график и просматривает все пути из любых двух заданных точек.
Точки ABCDE исоединения на графике следующие:
A->B, A->D, A->E
B->C
C->D, C->E
D->C, D->E
E->B
Мне нужно закодировать его так, чтобы он просматривал все возможные пути, которые меньше определенной длины (скажем, 30).Причудливый бит спецификации состоит в том, что он может посещать пункт назначения как часть пути, например:
Начало C, идущее к C, может следовать:
CDC, CEBC, CEBCDC, CDCEBC,CDEBC, CEBCEBC, CEBCEBCEBC
Теперь мой код выглядит следующим образом ...
private void findAllPaths(LinkedList path, Junction node, Junction end)
{
path.add(node);
if(node == end && path.size() > 1)
{
System.out.println(path);
}
else
{
for(Road r : node.getAdjacencies())
{
if(path.size() < 30) findAllPaths(path, r.getTarget(), end);
}
}
}
И это дает мне пути: [C, D, C] [C, D, C,E, B, C] [C, D, C, E, B, C, E, B, C]
Моя проблема в том, что рекурсия, кажется, не происходит так, как я ожидаю.Это только когда-либо следует за первой смежностью для каждого узла и никогда не возвращается, чтобы попробовать другие.
Если кто-то может увидеть, где я иду смехотворно неправильно или увидеть мою проблему, пожалуйста, напишите!Буду признателен за любую помощь ...
Ура,
Djoodle