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