Depth First Итеративный алгоритм углубления, не дающий результатов (в Java)

У меня есть алгоритм поиска, который должен анализировать все дерево, найти все результаты, которые могут соответствовать поисковому запросу, и вернуть их все в виде списка. Я понимаю, что это не совсем суть алгоритма, но я делаю это как тест с шириной вначале и поиском в глубину, чтобы увидеть, что быстрее всего, синхронизируя их. Два других поиска работают по назначению, но когда я ввожу ту же информацию поиска, что и моя цель для поиска DFID, я получаю пустой список. Так что я знаю, что мои данные верны, просто что-то в алгоритме неверно, и я не могу понять, что именно. Я написал это на основе псевдокода в Википедии. Вот что у меня есть:

boolean maxDepth = false;
List<String> results = new ArrayList<String>();

public List<String> dfid(Tree t, String goal)
{
    int depth = 0;

    while (!maxDepth)
    {
        System.out.println(results);
        maxDepth = true;
        depth += 1;
        dls(t.root, goal, depth);
    }
    return results;
}

public void dls(Node node, String goal, int depth)
{
    System.out.println(depth);
    if (depth == 0 && node.data.contains(goal))
    {
        //set maxDepth to false if the node has children
        if (!node.children.isEmpty())
        {
            maxDepth = false;
        }
        results.add(node.data);
    }
    else if (depth > 0)
    {
        for(Node child : node.children)
        {
            dls(child, goal, depth-1);
        }
    }
}

1 ответ

Решение

Поменяйте местами предложенные zim-zam строки и добавьте еще один (после else, если глубина> 0), чтобы перевернуть maxDepth в false

Другие вопросы по тегам