Java-рекурсия для поиска всех путей на графике - PullRequest
1 голос
/ 28 февраля 2012

Хорошо, предыстория проблемы:

Я пишу небольшое приложение, которое просматривает график и просматривает все пути из любых двух заданных точек.

Точки 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

1 Ответ

2 голосов
/ 28 февраля 2012

Вы больше не удаляете узел после того, как попробовали:

private void findAllPaths(LinkedList path, Junction node, Junction end)
{   
    path.add(node);
    // etc...
    path.removeLast();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...