我在DFS上练习,但是我的代码在某些地方出错,我无法解决。这是我的代码:
public static <T> void doSearch(Dimension start, Dimension end, char[][] grid) {
System.out.println(start);
while (true) {
if (checkEqual(start, end)) {
break; // stop searching
}
getPossibleMoves(start, grid);
doSearch(moves.pop(), end, grid);
}
} // the end
在我的doSearch()
方法中,我有“移动”堆栈来存储移动,possibleMoves()
方法用于查找可以从“开始”进行的移动。但是当checkEqual()
方法检查到我已经到达目标时,它会跳出while循环并且到达结尾但仍然返回到while循环,因此doSearch()
方法永远不会停止。我在哪里弄错了?
答案 0 :(得分:0)
该方法的逻辑是错误的。想象一下,在while循环的第一次迭代中,“checkEquals”返回“false”并且您获得可能的移动然后您在第一个可能的移动中搜索。在下一次迭代中,会发生同样的事情:“checkEqual”将返回false并且您将重新生成可能的移动,并且您将在第一个可能的移动中进行搜索!这将永远发生。