2022-06-23 22:29:19 +02:00

46 lines
1.0 KiB
Java
Executable File

package search.uninformed.iterativedeepening;
import search.Node;
public class IterativeDeepening
{
public <T> Node<T> iterativeDeepening(final Node<T> node, final Node<T> target)
{
var lowBarrier = 0;
Node<T> resultNode;
do
{
resultNode = depthFirstSearch(node, target, 0, lowBarrier++);
}
while (resultNode == null);
return resultNode;
}
private <T> Node<T> depthFirstSearch(final Node<T> node, final Node<T> target, int depth, final int barrier)
{
if (node.isTargetReached(target))
{
return node;
}
final var newNodes = node.generateSuccessors();
while (!newNodes.isEmpty() && depth < barrier)
{
final var resultNode = depthFirstSearch(newNodes.get(0), target, ++depth, barrier);
if (resultNode != null)
{
return resultNode;
}
newNodes.remove(0);
}
return null;
}
}