Я пытался реализовать алгоритм поиска IDS. Тем не менее, это не заканчивается. newStn
- это начальный SearchTreeNode, который я помещаю в стек в начале каждой итерации. Затем внутри цикла while я проверяю, пуст ли стек, содержащий узлы, если это так, то maxDepth
увеличивается, и я начинаю с начала и перерываю цикл while. В случае, если стек не пустой, моя логика - вставить первый элемент в стек и проверить, достигнута ли цель или нет. Если это не так, я добавляю дочерние элементы в стек только в том случае, если они находятся на глубине, меньшей или равной maxDepth
. Тем не менее, мой код работает вечно. Может ли кто-нибудь дать мне подсказку, что я могу делать неправильно, учитывая, что мой код прекрасно работает для DFS
case "ID":
int maxDepth = 1;
boolean flag = true;
for (int i=0;i<maxDepth;i++) {
stackNodes.push(newStn);
while (flag) {
if (stackNodes.isEmpty()) {
maxDepth+=1;
break;
} else {
SearchTreeNode node = stackNodes.pop();
if (GoalTest(node.state)) {
System.out.println(PathCost(node)+";"+node.depth);
flag = false;
return node;
} else {
for (int y = 0; y < sp.operators.length; y++) {
State egs = sp.transition(sp.operators[y], node); // get the state
if (egs == null) {
} else {
int depthchild = node.depth + 1;
int d = node.state.cost;
if(depthchild<=maxDepth-1) {
SearchTreeNode searchtreenode = new SearchTreeNode(egs, node, sp.operators[y],
depthchild, d);
stackNodes.push(searchtreenode);
}
}
}
}
}
}
}
break;